JSON通过Jackson重复了属性验证

时间:2011-04-13 18:50:17

标签: java json jackson specifications

我使用Jackson并想检查输入的JSON字符串是否包含重复的属性,如:

{"a" : 1, "a" : 0}

以下Jackson片段进程输入字符串没有任何错误甚至返回值:

JsonNode jsonSelect = mapper.readTree("{ A : 1, A : 0}"); System.out.println(jsonSelect.getFieldValue("A")); // prints 0

我是否有机会通过杰克逊验证重复项?

P.S。 JSON格式是否支持重复属性?我在specification中没有找到任何限制。同样org.json.JSONObject会因重复项而抛出异常但没有给出答案 - {"a" : 1, "a" : 0}根据标准格式良好。

2 个答案:

答案 0 :(得分:3)

JSON规范表明重复项不被视为有效,但解析器不需要对它们执行任何操作。从实际角度来看,跟踪所有看到的属性会增加开销,这在流解析器级别可能没有意义。

至于Jackson,它曾经在数据绑定级别进行重复检测,但我认为此时尚未启用。处理地图时可以相当容易地添加它。 如果这是你想要的东西,提交功能请求或询问用户列表可能是有意义的(特别是看其他人是否也想要这个功能,使其更有可能很快被添加)。

如果您只想进行验证,则可以创建Map子类,使其在重复时抛出异常。或者,只需在子类中设置一个标记,您可以根据需要进行检查。

答案 1 :(得分:0)

JSON不支持重复的属性。因此,如果您的输入保证是有效的JSON,则无需检查它们。