相关疑难解决方法(0)

将具有重复键的JSON对象转换为JSON数组

我有一个从包含重复密钥的数据库中获取的JSON字符串。我想通过将重复键的值组合到数组中来删除重复键。

例如

输入项

{
"a":"b",
"c":"d",
"c":"e",
"f":"g"
}
Run Code Online (Sandbox Code Playgroud)

输出量

{
"a":"b",
"c":["d","e"],
"f":"g"
}
Run Code Online (Sandbox Code Playgroud)

实际数据是一个可能嵌套的大文件。我不会提前知道有多少对。

我需要为此使用Java。org.json由于重复的键而引发异常,gson可以解析字符串,但是每个重复的键都会覆盖最后一个。我需要保留所有数据。

如果可能的话,我想不编辑任何库代码就这样做

java arrays json duplicates gson

5
推荐指数
1
解决办法
1万
查看次数

解析包含重复键的json

我正在尝试使用无效结构解析json,该结构具有使用Jackson库的重复键.如果json有重复键,我想将它们作为一个提取Collection.

我正在尝试解析的示例(我正在尝试解析的实际json来自Wiresharkjson export):

{
    "a": "a",
    "a": {
        "b": {

        },
        "b": true
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,由于此json具有重复键,因此仅保留最后一个值:

JsonNode tree = new ObjectMapper().readTree(json);
System.out.println(tree); // {"a":{"b":true}}
Run Code Online (Sandbox Code Playgroud)

我也尝试过GuavaMultimap支持的模块,但它不能像嵌套的json对象那样工作.

我之前展示的json使用Guava模块的示例:

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}]}
Run Code Online (Sandbox Code Playgroud)

我应该如何使用Jackson库来解决这个问题?是否还有其他库可以支持解析java的这种json结构?

java json jackson

5
推荐指数
1
解决办法
5111
查看次数

标签 统计

java ×2

json ×2

arrays ×1

duplicates ×1

gson ×1

jackson ×1