我有两个JsonString,需要转换为JsonNode并加入这两个JsonNodes。如果两个jsonnode的键不同,则代码运行良好,但如果它们相同,则后者将覆盖。这是我的两个JsonNodes:
“{\”语音类型\:\“N95\”,\"cat\":\"WP\"}“ {“语音类型\”:\“n96\”,\“cat\”:\“Wy\”}。
我的代码生成的结果如下:{"phonetype":"N96","cat":"Wy"}
public class JsonJoining {
public static void main(String[] args) throws JsonProcessingException, IOException {
ObjectMapper mapper = new ObjectMapper();
JsonNode mainNode=mapper.readTree("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
JsonNode resuupdateNode=mapper.readTree("{\"phonetype\":\"N96\",\"cat\":\"Wy\"}");
JsonNode result=merge(mainNode, resuupdateNode);
System.out.println(result);
}
public static JsonNode merge(JsonNode mainNode, JsonNode updateNode) {
Iterator<String> fieldNames = updateNode.fieldNames();
while (fieldNames.hasNext()) {
String fieldName = fieldNames.next();
System.out.println(fieldName);
JsonNode jsonNode = mainNode.get(fieldName);
if (jsonNode != null && jsonNode.isObject()) {
merge(jsonNode, updateNode.get(fieldName));
}
else {
if (mainNode instanceof ObjectNode) {
JsonNode value = updateNode.get(fieldName);
((ObjectNode) mainNode).put(fieldName, value);
}
}
}
return mainNode;
}
}是否有可能合并这两个Jsonnode并生成第三个jsonnode,其外观如下:
{"firstjson":{"phonetype":"N95","cat":"WP"},
"secondjson":{phonetype":"N96","cat":"Wy}}发布于 2018-09-26 21:58:56
尝试以下几个方面:
public static JsonNode mergeCollection(JsonNode value1,JsonNode value2){
ObjectNode objectNode = mapper.createObjectNode();
if(value1!=null) {
ObjectNode node1 = mapper.createObjectNode();
node1.set("value1",value1);
node1.fields().forEachRemaining(kv -> objectNode.set(kv.getKey(), kv.getValue()));
}
if(value2!=null) {
ObjectNode node2 = mapper.createObjectNode();
node2.set("value2",value2);
node2.fields().forEachRemaining(kv -> objectNode.set(kv.getKey(), kv.getValue()));
}
return objectNode;
}发布于 2020-12-01 06:10:26
ObjectMapper mapper = new ObjectMapper();
ArrayNode jsonArray = mapper.createArrayNode();
jsonArray.add(value1);
jsonArray.add(value2);
System.out.println(jsonArray);发布于 2021-02-16 06:40:53
相信我,下面的代码是合并两个或多个jsonnodes的最佳方法。
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.JsonNode;
JsonNode js1,js2,js3;
String result=js1.toString()+js2.toString()+js3.toString();
result=result.replace("}{",",");
JsonNode j=new ObjectMapper().readTree(result); // remove the duplicate entry and convert string to jsonhttps://stackoverflow.com/questions/46914704
复制相似问题