杰克逊将“14:89:FD:D3:E7:8C”解码为14

时间:2015-11-09 16:02:56

标签: java json jackson

我有以下代码将“14:89:FD:D3:E7:8C”解码为14,而它应该返回某种错误:

ObjectMapper mapper = new ObjectMapper();
mapper.configure(Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
JsonNode node = mapper.readTree("14:89:FD:D3:E7:8C");
String str = node.toString();
System.out.println(str);

为什么会这样?我可以让jackson在错误的json字符串上返回错误吗?

2 个答案:

答案 0 :(得分:2)

也许您想首先验证输入是否是有效的JSON字符串 - How to Validate JSON with Jackson JSON

答案 1 :(得分:1)

我认为旧版本没有使用前瞻来检测异常,但是简单地接受任何看起来像数字的东西,停止解码。只有在尝试推进流时才会检测到错误(或者在某些情况下甚至可能不会检测到错误)。

较新的版本应该通过强制找到空格或输入结束来检测到这种情况;如果没有找到则表示错误。我用2.6.3验证了这一点,但我认为修复大约在2.4左右。