我正在尝试使用具有Jackson
库重复键的无效结构解析json 。如果json中有重复的键,我想将它们提取为Collection
。
我要解析的示例(我要解析的实际json来自Wireshark
json导出):
{
"a": "a",
"a": {
"b": {
},
"b": true
}
}
但是,由于此json具有重复键,因此仅保留了最后一个值:
JsonNode tree = new ObjectMapper().readTree(json);
System.out.println(tree); // {"a":{"b":true}}
我也试过了Guava
具有Multimap
支持的模块,但是它不能像预期的那样用于嵌套json对象。
将Guava模块用于之前显示的json的示例:
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new GuavaModule());
mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
Multimap read = mapper.readValue(json, Multimap.class);
System.out.println(read); // {a=[a, {b=true}]}
我应该如何使用Jackson
库解决此问题?是否还有其他支持Java的json结构解析的库?
如果您灵活使用json库,则可以使用net.sf.json.JSONObject
。
该库将通过将重复的值存储到数组中来保留它们。如果有多个相同的键可用,它将创建一个键,所有值都将作为Array。
编码部分也只是一行。一旦使用net.sf.json.JSONObject解析了json,就可以将其提供给jackson库。
JSONObject jsonObject = JSONObject.fromObject( "{ \"a\": \"a\", \"a\": { \"b\": {},\"b\": true}}" );
System.out.println( "net.sf.json.JSONObject: " + jsonObject );
JsonNode jsonNode = new ObjectMapper().readTree( jsonObject.toString() );
System.out.println( "com.fasterxml.jackson.databind.JsonNode" + jsonNode );
输出:
net.sf.json.JSONObject: {"a":["a",{"b":[{},true]}]}
com.fasterxml.jackson.databind.JsonNode{"a":["a",{"b":[{},true]}]}
Maven的依赖net.sf.json
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
本文向大家介绍python解析含有重复key的json方法,包括了python解析含有重复key的json方法的使用技巧和注意事项,需要的朋友参考一下 python自带的json包能够方便的解析json文本,但是如果json文本中包含重复key的时候,解析的结果就是错误的。如下为例 经过解析,结果却如下所示: 原因是python解析的时候是创建一个字典,首先会读取到key的值,但是后面遇到重复键的
问题内容: 我需要解析一个json文件,不幸的是,该文件不遵循原型。我的数据有两个问题,但是我已经找到了解决方法,所以我只在最后提一下,也许有人也可以提供帮助。 所以我需要解析这样的条目: json默认解析器更新字典,因此仅使用最后一个条目。我不得不以某种方式存储另一个,我也不知道如何做到这一点。我还必须将密钥以它们在文件中出现的顺序存储在几个字典中,这就是为什么我使用OrderedDict这样做
问题内容: 我有一个类似的问题,如下所示,但解决方案无法解决我的问题。 休眠复合主键包含复合外键,如何映射 我正在尝试加入2个表,每个表都有一个带有部分外键引用的复合主键。 在一个: 在BPK中: 上面的方法给我这个异常: 你能帮忙吗? 问题答案: 假设f1和F2唯一标识A并存在于APK中,则可以通过几种方式使用JPA 2.0的派生ID。最容易显示的是: 这里的关键点是B对A的引用控制了外键字段f
问题内容: 我有一个类似的问题,如下所示,但解决方案无法解决我的问题。 休眠复合主键包含复合外键,如何映射 我正在尝试加入2个表,每个表都有一个带有部分外键引用的复合主键。 在一个: 在BPK中: 上面的方法给我这个异常: 你能帮忙吗? 问题答案: 假设f1和F2唯一标识A并存在于APK中,则可以通过几种方式使用JPA 2.0的派生ID。最容易显示的是: 这里的关键点是B对A的引用控制了外键字段f
我有一个类似的问题如下,但解决方案没有解决我的问题。 hibernate复合主键包含复合外键,如何映射此 我试图连接2个表,每个表都有一个复合主键和部分外键引用。 你能帮忙吗?
问题内容: 在我的网站中,我尝试将字符串转换为包含换行符的JSON。 这将产生“意外令牌”错误。我需要以某种方式逃脱吗? 问题答案: 是的,您应该同时退出这两个字符,因为它们都属于控制字符列表。您可以在此处找到需要转义的字符的完整列表。您的代码将是 JSFiddle:链接