我使用 Jackson 并想检查输入的 JSON 字符串是否包含重复的属性,例如:
{"a": 1, "a": 0}
以下Jackson片段处理输入字符串没有任何错误甚至返回值:
JsonNode jsonSelect = mapper.readTree("{ A : 1, A : 0}");
System.out.println(jsonSelect.getFieldValue("A"));//打印 0
我有机会通过 Jackson 验证重复项吗?
附言JSON 格式是否完全支持重复的属性?我在 specification 中没有找到关于它的任何限制。 .此外,org.json.JSONObject
为重复项抛出异常,但没有给我答案 - 是 {"a": 1, "a": 0}
好吧-按标准形成。
最佳答案
JSON 规范表明重复项不被视为有效,但解析器不需要对它们做任何事情。从实际的角度来看,跟踪所有可见的属性会增加开销,这在流式解析器级别可能没有意义。
至于 jackson ,它曾经在数据绑定(bind)级别进行重复检测,但我认为目前还没有启用。在处理 map 时可以很容易地添加它。 如果这是您想要的,提交功能请求或询问用户列表可能是有意义的(尤其是看看其他人是否也想要此功能,从而更有可能很快添加)。
如果你只想做验证,你可以创建一个 Map 子类,让它在重复时抛出异常。或者,只需在子类中设置一个标志,您可以检查是否愿意。
关于java - 通过 Jackson 进行 JSON 重复属性验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5654044/