杰克逊中不区分大小写的JsonNode

时间:2011-08-21 23:17:42

标签: java json jackson

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

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

这需要具有高效性,因此调用getFieldNames()并降低结果并不是一个好的解决方案。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

此功能自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