Jackson 2.6.0 JsonParser#getCurrentValue()返回null而不是JSON属性的值

时间:2015-08-05 07:03:29

标签: jackson

在Jackson 2.6.0中,JsonParser#getCurrentValue()返回null而不是当前解析的JSON属性的值。

此问题末尾的示例方法打印:

a
null

但我希望它能打印出来:

a
b

为什么打印null而不是b

如何将当前JSON属性的值作为Object获取,以便它返回StringBooleanInteger,{{1} },LongDoubleFloat等,或BigDecimal,视情况而定?

我知道必须有一个算法来决定何时返回,例如,null作为1IntegerLong,{ {1}}或其他一些Double子类,但我认为这是一个默认算法,可以用自定义算法替换。

示例方法:

BigDecimal

1 个答案:

答案 0 :(得分:1)

这里有很多不同的事情。

首先:getCurrentValue()根本不是由低级流API本身维护的,因此您的代码永远不会看到非空值。相反,它由基于Java POJO对象的数据绑定(更高级别)进行管理,这些对象仅在数据绑定时处理。 方法本身位于JsonParserJsonGenerator的原因是由于实际限制,因为解析器/生成器通过处理传递,可用于JsonSerializer / JsonDeserializer,并具有层次结构范围:从概念上讲,这些信息完全属于数据绑定级别。

如果您只想在流媒体级别上操作,这些方法将对您无用。您需要自己跟踪所有信息。 或者,也许您应该使用JsonNode将JSON绑定为ObjectMapper,然后遍历逻辑内存树。流处理最大限度地减少了它保留的状态量,这对于大多数操作来说不一定非常方便。