杰克逊:反序列化(解析)空Unicode

Posted

技术标签:

【中文标题】杰克逊:反序列化(解析)空Unicode【英文标题】:Jackson: deserializing (parsing) null Unicode 【发布时间】:2011-08-21 14:55:08 【问题描述】:

我使用 Jackson 反序列化(解析)一个简单的 JSON 事件,代码如下:

JsonParser parser = ... // Initialized via JsonFactory for simple JSON String
ObjectMapper mapper = new ObjectMapper();
HashMap<String, Object> attributes = mapper.readValue(parser,
                     new TypeReference<HashMap<String, Object>>() );

除了 JSON 输入包含 Unicode 空值 (\u0000) 之外,代码在我测试过的几种情况下都能正常工作。

更具体地说,如果上面的 JSON 字符串有一个包含 Unicode 的键值对,例如


... (start K-V pairs),
"UniKey":"\u0000...",
... (end K-V pairs)

解析器正确地将所有“开始 KV 对”(不包含空 Unicode)读入属性 HashMap,但在遇到“UniKey”的空 Unicode 值时立即停止反序列化,返回一个空值并且从不解析其余的JSON 字符串(即“结束 KV 对”)。

有什么方法可以告诉 Jackson 在反序列化中忽略 null Unicode?​​p>

【问题讨论】:

【参考方案1】:

包含 null (\u0000) 的字符串由某些 Java 方法读取/打印,而不由其他方法读取/打印,因此它们仅显示为截断。所以该值可能实际上存在,但不会由 System.out.println() 之类的东西显示。

【讨论】:

确实如此。

以上是关于杰克逊:反序列化(解析)空Unicode的主要内容,如果未能解决你的问题,请参考以下文章

如何用杰克逊反序列化空字符串?

杰克逊未能将字符串反序列化为 Joda-Time

杰克逊:使用时区 id 解析 ZonedDateTime

杰克逊:地图的反序列化

有啥方法可以防止杰克逊中的字段反序列化?

JSON杰克逊序列化反序列化列表列表