java - 将多个字符串json合并到一个java中

标签 java json

我有多个 json 字符串,例如:

JSON 1:

{
"a":"test1",

"b":"test2"
}

JSON 2:

{
"b":"test3",

"c":"test4"
}

我想要最终的 json 为:

{
"a":"test1",

"b":["test2","test3"],
"c":"test4"
}

我怎样才能在java中做到这一点?

最佳答案

您可以使用任何一种最流行的 JSON 库来实现这一目标,以下示例展示了如何通过 Jackson 将多个 JSON 字符串合并为一个字符串。 。

我使用Map<String, Object> (表示jsonMap)用于合并的 JSON 字符串。如果所有给定 JSON 字符串中的键相同,则其在 jsonMap 中的值将为 String 。否则,其值为 List<String> .

示例代码

List<String> jsonStrList = Arrays.asList("{\"a\":\"test1\",\"b\":\"test2\"}","{\"b\":\"test3\",\"c\":\"test4\"}");

ObjectMapper mapper = new ObjectMapper();
Map<String, Object> jsonMap = new HashMap<>();
for (String jsonStr : jsonStrList) {
    Map<String, String> jsonContent = mapper.readValue(jsonStr, Map.class);
    jsonContent.forEach((k,v) -> {
        if (jsonMap.containsKey(k)) {
            if (jsonMap.get(k) instanceof String) {
                List<String> content = new ArrayList<>();
                content.add(jsonMap.get(k).toString());
                content.add(v);
                jsonMap.put(k, content);
            } else {
                jsonMap.put(k, ((ArrayList) jsonMap.get(k)).add(v));
            }
        } else {
            jsonMap.put(k, v);
        }
    });
}
System.out.println(jsonMap.toString());
System.out.println(new ObjectMapper().writeValueAsString(jsonMap).toString());

控制台输出

{a=test1, b=[test2], c=test4}
{"a":"test1","b":["test2","test3"],"c":"test4"}

关于java - 将多个字符串json合并到一个java中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58377542/

相关文章:

java - Fruchterman 和 Reingold 算法顶点在输出中占据相同位置(图形布局)

java - intellij下的单元测试

java - 查找 map 是否包含列表/可迭代中的任何键的有效方法

java - Java 中的 JSON 二进制数组到图像

javascript - 使用默认的 JavaScriptSerializer 将 DateTime 绑定(bind)到挖空 View 模型

java - 使用itext在java中将Tiff转换为Pdf

java - 值 'CONTINUE' 不是运行 liquibase 时的 facet-valid 错误

html - 单击时显示弹出窗口

java - Spring MVC : JSON to Pojo conversion throwing HTTP 415 Error

Python jsonschema 无法验证字符串枚举