首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将多个字符串json合并为一个java

将多个字符串json合并为一个java
EN

Stack Overflow用户
提问于 2019-10-14 13:08:03
回答 3查看 906关注 0票数 0

我有多个json字符串,如:

JSON 1:

代码语言:javascript
运行
复制
{
"a":"test1",

"b":"test2"
}

JSON 2:

代码语言:javascript
运行
复制
{
"b":"test3",

"c":"test4"
}

我想要最后的json:

代码语言:javascript
运行
复制
{
"a":"test1",

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

我如何在java中做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-15 07:38:42

您可以使用任何一个最流行的JSON库来实现这一点,下面的示例演示如何通过Jackson将几个JSON字符串合并成一个JSON字符串。

对于合并的JSON字符串,我使用Map<String, Object> (如jsonMap)。如果所有给定JSON字符串中的键是相同的,那么它在jsonMap中的值将是String。否则,它的值将是List<String>

示例代码

代码语言:javascript
运行
复制
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"}

票数 0
EN

Stack Overflow用户

发布于 2019-10-14 13:34:30

您需要一个API或框架来解析java中的JSON。然后,您必须对JSON字符串进行迭代,将它们解析为键值对。一旦您有了它,我建议使用Map来按键存储它们。以下是一些伪代码:

代码语言:javascript
运行
复制
public class KeyValuePair {
    private String key = null;
    private String value = null;
    // todo create constructor with arguments
    // todo create getters and setters
}

private List<KeyValuePair> parseJSON(String json) {
    List<KeyValuePair> parsed = new ArrayList<>();
    // todo use the JSON API you chose to parse the json string into an ArrayList of KeyValuePair
    return parsed;
}

Map<String, List<String>> results = new HashMap<>();
List<String> jsonStrings = new ArrayList<>();
// todo read your JSON strings into jsonStrings
for (String jsonString : jsonStrings) {
    List<KeyValuePair> pairs = parseJSON(jsonString);
    for (KeyValuePair pair : pairs) {
        List<String> values = results.get(pair.getKey());
        if (values == null) {
            values = new ArrayList<>();
            results.put(pair.getKey(), values);
        }
        values.add(pair.getValue());
    }
}
// todo you'll have to loop through the map's keys and construct your result JSON
票数 0
EN

Stack Overflow用户

发布于 2019-10-14 13:38:10

您可以使用JSONObject类执行所需的操作。据我所知,你现在有一些字符串。可以使用构造函数为每个字符串创建一个JSONObject:

代码语言:javascript
运行
复制
JSONObject jObject = new JSONObject(String str);

然后,您可以迭代您的JSONObject,在一个新的JSONObject中检查一个新的JSON构造。您有一些非常好的方法,这些方法对您非常有用,但是我认为get和put方法足以实现这种合并。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58377542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档