scala import play.api.libs.json._ import com.fasterxml.jackson.databind.ObjectMapper scala val sourceJson = Json.parse("""{"name":"John", "age":30, "address":{"city":"New York"}}""") val targetJson = Json.parse("""{"name":"Doe", "address":{"country":"United States"}}""") scala val keepSourceMergedJson = sourceJson.deepMerge(targetJson)(JsonMergeOptions.keepExisting) val overwriteMergedJson = sourceJson.deepMerge(targetJson)(JsonMergeOptions.overwrite) val mergeMergedJson = sourceJson.deepMerge(targetJson)(JsonMergeOptions.merge) scala println(keepSourceMergedJson) println(overwriteMergedJson) println(mergeMergedJson) import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; public class JsonMergeExample { public static void main(String[] args) { try { ObjectMapper objectMapper = new ObjectMapper(); JsonNode sourceJson = objectMapper.readTree("{\"name\":\"John\", \"age\":30, \"address\":{\"city\":\"New York\"}}"); JsonNode targetJson = objectMapper.readTree("{\"name\":\"Doe\", \"address\":{\"country\":\"United States\"}}"); JsonNode keepSourceMergedJson = mergeJson(sourceJson, targetJson, JsonMergeStrategy.KEEP_SOURCE); System.out.println(keepSourceMergedJson.toString()); JsonNode overwriteMergedJson = mergeJson(sourceJson, targetJson, JsonMergeStrategy.OVERWRITE); System.out.println(overwriteMergedJson.toString()); JsonNode mergeMergedJson = mergeJson(sourceJson, targetJson, JsonMergeStrategy.MERGE); System.out.println(mergeMergedJson.toString()); } catch (Exception e) { e.printStackTrace(); } } private static JsonNode mergeJson(JsonNode source, JsonNode target, JsonMergeStrategy strategy) { ObjectMapper objectMapper = new ObjectMapper(); ObjectNode mergedJson = objectMapper.createObjectNode(); switch (strategy) { case KEEP_SOURCE: mergeWithKeepSource(source, target, mergedJson); break; case OVERWRITE: mergeWithOverwrite(source, target, mergedJson); break; case MERGE: mergeWithMerge(source, target, mergedJson); break; } return mergedJson; } private static void mergeWithKeepSource(JsonNode source, JsonNode target, ObjectNode mergedJson) { for (String fieldName : source.fieldNames()) { JsonNode sourceValue = source.get(fieldName); mergedJson.set(fieldName, sourceValue); } for (String fieldName : target.fieldNames()) { if (!mergedJson.has(fieldName)) { JsonNode targetValue = target.get(fieldName); mergedJson.set(fieldName, targetValue); } } } private static void mergeWithOverwrite(JsonNode source, JsonNode target, ObjectNode mergedJson) { mergedJson.setAll((ObjectNode) source); mergedJson.setAll((ObjectNode) target); } private static void mergeWithMerge(JsonNode source, JsonNode target, ObjectNode mergedJson) { mergedJson.setAll((ObjectNode) source); mergedJson.setAll((ObjectNode) target); for (String fieldName : mergedJson.fieldNames()) { if (source.has(fieldName) && target.has(fieldName)) { JsonNode sourceValue = source.get(fieldName); JsonNode targetValue = target.get(fieldName); if (sourceValue.isObject() && targetValue.isObject()) { mergeWithMerge(sourceValue, targetValue, (ObjectNode) mergedJson.get(fieldName)); } } } } private enum JsonMergeStrategy { KEEP_SOURCE, OVERWRITE, MERGE } }


上一篇:
下一篇:
切换中文