【问题标题】:Case-insensitive JsonNode in Jackson杰克逊中不区分大小写的 JsonNode
【发布时间】:2011-08-21 23:17:42
【问题描述】:

我需要反序列化 JSON 对象并以不区分大小写的方式访问字段。示例:

String s = "{\"FOO\": 123}";
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(s);
node.get("foo"); // this should return the "FOO" field

这需要高性能,因此调用getFieldNames() 并将结果小写并不是一个好的解决方案。

【问题讨论】:

    标签: java json jackson


    【解决方案1】:

    没有自动化的方法,但您可以通过创建自定义的 JsonNodeFactory 来创建自定义的 ObjectNode,然后您可以覆盖用于添加和访问条目的方法。

    【讨论】:

      【解决方案2】:

      此功能自 2.5(2015 年 1 月)起可用:

      ACCEPT_CASE_INSENSITIVE_PROPERTIES

      允许对传入 JSON 进行更宽容的反序列化的功能。如果启用,bean 属性将使用它们的小写等效项进行匹配,这意味着任何大小写组合(传入和匹配的名称由小写规范化)都应该有效。 请注意,由于传入的属性名称在比较之前需要小写,因此存在额外的性能开销,对于有大写字母的情况。然而,已经是小写的名称的开销应该可以忽略不计。

      功能默认禁用。

      https://fasterxml.github.io/jackson-databind/javadoc/2.5/com/fasterxml/jackson/databind/MapperFeature.html

      【讨论】:

        猜你喜欢
        • 2014-08-01
        • 1970-01-01
        • 2018-03-13
        • 2016-11-16
        • 1970-01-01
        • 2019-08-17
        • 1970-01-01
        • 2018-08-16
        • 1970-01-01
        相关资源
        最近更新 更多