![]() |
不羁的苦瓜 · Java怎么把多个对象的list的数据合并 ...· 1 月前 · |
![]() |
帅呆的金鱼 · QTreeView设置节点图标 - CSDN文库· 8 月前 · |
![]() |
道上混的创口贴 · js ...map - CSDN文库· 8 月前 · |
![]() |
酒量小的四季豆 · C#中string和ASCII相互转换 - ...· 9 月前 · |
![]() |
失望的红烧肉 · 云效流水线支持多模块maven工程吗? ...· 1 年前 · |
![]() |
健壮的大象 · QT下拉框禁用鼠标滚动改变当前项_qt的下拉 ...· 1 年前 · |
我有多个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<>();