当前位置: 首页 > 知识库问答 >
问题:

为什么jackson jr没有检测到dupliacte JSON密钥?

穆修杰
2023-03-14

我正在用jackson jr作为jackson databind的轻量级替代品进行实验。我的目标是解析JSON字符串,如果遇到重复的键,则让解析器失败。据我所知,库可能会引发以下异常:

String duplicateKeyString =
            "{\"a\":1," +
             "\"b\":2," +
             "\"b\":3," + // <-- duplicate key
             "\"c\":4}";

Map<Object, Object> json = JSON.std.with(JSON.Feature.FAIL_ON_DUPLICATE_MAP_KEYS)
                                   .mapFrom(duplicateKeyString);

作为比较,如果我尝试使用jackson-data ind进行类似的操作,我会得到预期的IOException:

ObjectMapper om = new ObjectMapper();
om.enable(JsonParser.Feature.STRICT_DUPLICATE_DETECTION);
JsonNode node = om.readTree(duplicateKeyString);

我能发现的唯一区别是使用了. mapFrom(). readTree()。但是,我仍然希望在这两种情况下都会引发异常。我错过了什么还是这只是一个错误?

更相似的呼叫

JSON.std.with(new JacksonJrsTreeCodec())
        .with(JSON.Feature.FAIL_ON_DUPLICATE_MAP_KEYS)
        .treeFrom(duplicateKeyString);

也不会抛出异常。

共有1个答案

通俊发
2023-03-14

这是一个bug,已在开发分支中修复。它将包含在版本2.8.9和2.9.0中。pr3。

 类似资料:
  • TCP有一个keep-alive机制来检测死连接,但让我吃惊的是,默认情况下这个选项是关闭的,而且很多库/工具都没有利用这个特性。 如果我没有理解错,如果来自对等方的所有FIN/RST数据包丢失,在recv调用中阻塞的TCP连接将无法检测到对等方是否实际中止了连接。 客户端的timeout参数可能会缓解问题,但许多库也没有设置timeout的选项。一个例子是mysql-python连接器没有rec

  • 代码段 我使用redis-cli工具检查了密钥的可用性 钥匙* 而且 ttl密钥名 redis.conf具有默认值。 有什么建议吗? 编辑1: 完整代码: 功能在一个方面 当这些线路运行时 RedisAtomicInteger计数器=计数器=新RedisAtomicInteger(“MyKey”);Counter.Expire(1,TimeUnit.Minutes); 我能看见 在Redis日志中

  • 是我在复制时做错了什么,还是有办法不缓存特定的步骤?

  • 今天我开始玩分支,检查两个布尔值。我很确定,在某些优化级别上,它们将简单地添加并检查,但gcc和CLANG不是这样。为什么gcc不优化两个bool检查,用addition和一个check替换它们?让我给你看一个例子: 两个分支(test+je)不应该比加法和分支(add+jne)慢吗? 编辑:我真正的意思是乘法,因为在true和false的情况下(1+0),加法给出true(1),但乘法给出正确的

  • 问题内容: 我知道静态方法在类级别。因此,我知道我不需要创建实例来调用静态方法。但我也知道我可以将静态方法(如LIKE)称为实例方法。这是我感到困惑的地方,因为我期望从null对象调用静态方法(就像在调用实例方法中一样)。我真的很感谢一些解释,为什么我错了一个期望。 这是示例代码: 问题答案: 通过实例调用静态方法不需要实例存在。只要编译器能够确定变量的类型,它就可以在评估表达式并丢弃结果后静态进

  • 问题内容: 我写了一个简单的基准测试,以找出在通过按位和计算数组时是否可以消除边界检查。基本上,这就是几乎所有哈希表的作用:它们计算 作为一个指数到的,其中是或派生值。该结果表明,范围检查没有得到消除。 我的基准测试的想法很简单:计算两个值和,保证两个值都是有效的数组索引。 是循环计数器。当它用作数组索引时,将取消边界检查。 将计算为,其中每次迭代中都有一些值更改。当它用作数组索引时,不会消除边界