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

标签 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 格式是否完全支持重复的属性?我在 specification 中没有找到关于它的任何限制。 .此外,org.json.JSONObject 为重复项抛出异常,但没有给我答案 - 是 {"a": 1, "a": 0} 好吧-按标准形成。

最佳答案

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

至于 jackson ,它曾经在数据绑定(bind)级别进行重复检测,但我认为目前还没有启用。在处理 map 时可以很容易地添加它。 如果这是您想要的,提交功能请求或询问用户列表可能是有意义的(尤其是看看其他人是否也想要此功能,从而更有可能很快添加)。

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

关于java - 通过 Jackson 进行 JSON 重复属性验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5654044/

相关文章:

java - Jackson - 将 JSON 反序列化为类

java - Jackson 多态序列化生成不正确的类名

java - 如果启动了较新的实例,则终止程序的较旧实例

java - 强制 jackson 在没有 JsonIgnore 的情况下忽略 isEmpty

java - 尝试创建一个简单的加密程序

java - 搜索 Firestore 查询不在 RecycleView 中显示数据

在 C 中将 Protocol Buffer 与 JSON 相互转换,而不生成 C 代码

java - jackson 注释被忽略

java - 使用 Json Net 解析单个整数

python - 如何在 Django 中不使用模板返回 JSON?