我使用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}
根据标准格式良好。
答案 0 :(得分:3)
JSON规范表明重复项不被视为有效,但解析器不需要对它们执行任何操作。从实际角度来看,跟踪所有看到的属性会增加开销,这在流解析器级别可能没有意义。
至于Jackson,它曾经在数据绑定级别进行重复检测,但我认为此时尚未启用。处理地图时可以相当容易地添加它。 如果这是你想要的东西,提交功能请求或询问用户列表可能是有意义的(特别是看其他人是否也想要这个功能,使其更有可能很快被添加)。
如果您只想进行验证,则可以创建Map子类,使其在重复时抛出异常。或者,只需在子类中设置一个标记,您可以根据需要进行检查。
答案 1 :(得分:0)
JSON不支持重复的属性。因此,如果您的输入保证是有效的JSON,则无需检查它们。