Java 通过Jackson进行JSON重复属性验证

Java 通过Jackson进行JSON重复属性验证,java,json,jackson,specifications,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”);//打印0 我是否有机会通过Jackson验证副本 另外,JSON格式是否支持重复属性?我没有发现任何关于它的限制。另外,org.

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

{a:1,“a:0}

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


JsonNode jsonSelect=mapper.readTree(“{A:1,A:0}”);
System.out.println(jsonSelect.getFieldValue(“A”);//打印0

我是否有机会通过Jackson验证副本


另外,JSON格式是否支持重复属性?我没有发现任何关于它的限制。另外,
org.json.JSONObject
对重复的属性抛出一个异常,该异常没有给我答案-是
{“a”:1,“a”:0}
根据标准格式正确。

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

JSON规范指出重复不被认为是有效的,但是解析器不需要做任何事情。从实际的角度来看,跟踪所有看到的属性会增加开销,这在流解析器级别可能没有意义

至于Jackson,它过去在数据绑定级别具有重复检测,但我认为目前还没有启用。在处理地图时,可以相当容易地添加它。 若这是你们想要的,那个么提交一个功能请求或者在用户列表上询问可能是有意义的(特别是看看其他人是否也想要这个功能,使它更有可能很快被添加)


若你们只想做验证,你们可以创建一个映射子类,让它在复制时抛出异常。或者,只需在子类中设置一个标志,您可以检查您是否愿意。

否,我的输入不能保证JSON是有效的。什么规范说它是不正确的JSON?在json上找不到这样的限制。orgJSON基于JavaScript对象文字语法。JavaScript对象是命名值(“属性”)的集合。如果要将多个值与一个名称关联,则应使用数组值属性:{“a”:[1,0]}。支持重复属性名的Javascript有点像支持重复实例变量名的Java。
JSON.parse(“{”a:true,“a:true}”)对象{a:true}
,在最新的chrome中,它是无效的JSON,但本机JSON解析无法捕捉到这一点,所以是的,您必须检查