Skip to content

Instantly share code, notes, and snippets.

@dheerajkhatri
Created August 28, 2017 14:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dheerajkhatri/18b6cf910d3442e30d0ac15c79bf36b9 to your computer and use it in GitHub Desktop.
Save dheerajkhatri/18b6cf910d3442e30d0ac15c79bf36b9 to your computer and use it in GitHub Desktop.
Merge two Json Node
public JsonNode mergeNode(ObjectNode mainNode, ObjectNode updateNode) {
Iterator<String> fieldNames = updateNode.fieldNames();
while (fieldNames.hasNext()) {
String key = fieldNames.next();
JsonNode value = updateNode.get(key);
if(!mainNode.has(key)) {
mainNode.set(key, value);
} else {
if(value.isObject()) {
mergeNode((ObjectNode) mainNode.get(key), (ObjectNode) value);
} else if(value.isArray()) {
ArrayNode arrayNode = (ArrayNode) value;
arrayNode.add(mainNode.get(key));
mainNode.set(key, arrayNode);
} else if(value.isTextual() && (value.asText().startsWith("["))) {
try {
ArrayNode arrayNode = ((ArrayNode)JsonUtils.DEFAULT.mapper.readTree(value.asText())).addAll(
(ArrayNode) JsonUtils.DEFAULT.mapper.readTree(mainNode.get(key).asText()));
mainNode.set(key, arrayNode);
} catch (IOException e) {
//handle as string
mainNode.set(key, value);
}
} else if(value.isTextual() && (value.asText().startsWith("{"))) {
try {
JsonNode node1 = JsonUtils.DEFAULT.mapper.readTree(value.asText());
JsonNode node2 = JsonUtils.DEFAULT.mapper.readTree(mainNode.get(key).asText());
mainNode.set(key, mergeNode((ObjectNode) node1, (ObjectNode) node2));
} catch (IOException e) {
//handle as string
mainNode.set(key,value);
}
}
}
}
return mainNode;
}
public String jsonNodeToMapString(JsonNode node) throws JsonProcessingException {
Map<String,String> dynamicArgs = new HashMap<>();
Iterator<String> iter = node.fieldNames();
while(iter.hasNext()) {
String key = iter.next();
JsonNode valueNode = node.get(key);
if(valueNode.isObject() || valueNode.isArray()) {
dynamicArgs.put(key, valueNode.toString().replace("\"","\\\"") );
} else {
dynamicArgs.put(key, valueNode.asText());
}
}
return JsonUtils.DEFAULT.mapper.writeValueAsString(dynamicArgs);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment