在Jackson 2.6.0中,JsonParser#getCurrentValue()
返回null
而不是当前解析的JSON属性的值。
此问题末尾的示例方法打印:
a
null
但我希望它能打印出来:
a
b
为什么打印null
而不是b
?
如何将当前JSON属性的值作为Object
获取,以便它返回String
,Boolean
,Integer
,{{1} },Long
,Double
,Float
等,或BigDecimal
,视情况而定?
我知道必须有一个算法来决定何时返回,例如,null
作为1
,Integer
,Long
,{ {1}}或其他一些Double
子类,但我认为这是一个默认算法,可以用自定义算法替换。
示例方法:
BigDecimal
答案 0 :(得分:1)
这里有很多不同的事情。
首先:getCurrentValue()
根本不是由低级流API本身维护的,因此您的代码永远不会看到非空值。相反,它由基于Java POJO对象的数据绑定(更高级别)进行管理,这些对象仅在数据绑定时处理。
方法本身位于JsonParser
和JsonGenerator
的原因是由于实际限制,因为解析器/生成器通过处理传递,可用于JsonSerializer
/ JsonDeserializer
,并具有层次结构范围:从概念上讲,这些信息完全属于数据绑定级别。
如果您只想在流媒体级别上操作,这些方法将对您无用。您需要自己跟踪所有信息。
或者,也许您应该使用JsonNode
将JSON绑定为ObjectMapper
,然后遍历逻辑内存树。流处理最大限度地减少了它保留的状态量,这对于大多数操作来说不一定非常方便。