我有多个json字符串,如:
JSON 1:
{
"a":"test1",
"b":"test2"
}
JSON 2:
{
"b":"test3",
"c":"test4"
}
我想要最后的json:
{
"a":"test1",
"b":["test2","test3"],
"c":"test4"
}
我如何在java中做到这一点?
发布于 2019-10-15 07:38:42
您可以使用任何一个最流行的JSON库来实现这一点,下面的示例演示如何通过Jackson
将几个JSON字符串合并成一个JSON字符串。
对于合并的JSON字符串,我使用Map<String, Object>
(如jsonMap)。如果所有给定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"}
发布于 2019-10-14 13:34:30
您需要一个API或框架来解析java中的JSON。然后,您必须对JSON字符串进行迭代,将它们解析为键值对。一旦您有了它,我建议使用Map来按键存储它们。以下是一些伪代码:
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
发布于 2019-10-14 13:38:10
您可以使用JSONObject类执行所需的操作。据我所知,你现在有一些字符串。可以使用构造函数为每个字符串创建一个JSONObject:
JSONObject jObject = new JSONObject(String str);
然后,您可以迭代您的JSONObject,在一个新的JSONObject中检查一个新的JSON构造。您有一些非常好的方法,这些方法对您非常有用,但是我认为get和put方法足以实现这种合并。
https://stackoverflow.com/questions/58377542
复制相似问题