diff --git a/src/main/java/com/github/underscore/U.java b/src/main/java/com/github/underscore/U.java index 9db4c139..6e0c1779 100644 --- a/src/main/java/com/github/underscore/U.java +++ b/src/main/java/com/github/underscore/U.java @@ -2798,6 +2798,48 @@ public static String xmlOrJsonToJson(String xmlOrJson) { return xmlOrJsonToJson(xmlOrJson, Json.JsonStringBuilder.Step.TWO_SPACES); } + public static String mergeXmlsOrJsonsToJson(List xmlsOrJsons, Json.JsonStringBuilder.Step identStep) { + Map resultJsonMap = new LinkedHashMap<>(); + for (String xmlOrJsonToJson : xmlsOrJsons) { + TextType textType = getTextType(xmlOrJsonToJson); + final Map jsonOrXmlMap; + if (textType == TextType.JSON) { + jsonOrXmlMap = fromJsonMap(xmlOrJsonToJson); + } else if (textType == TextType.XML) { + jsonOrXmlMap = fromXmlMap(xmlOrJsonToJson); + } else { + continue; + } + resultJsonMap = U.update(resultJsonMap, jsonOrXmlMap); + } + return resultJsonMap.isEmpty() ? "" : Json.toJson(resultJsonMap, identStep); + } + + public static String mergeXmlsOrJsonsToJson(List xmlsOrJsons) { + return mergeXmlsOrJsonsToJson(xmlsOrJsons, Json.JsonStringBuilder.Step.TWO_SPACES); + } + + public static String mergeXmlsOrJsonsToXml(List xmlsOrJsons, Xml.XmlStringBuilder.Step identStep) { + Map resultXmlMap = new LinkedHashMap<>(); + for (String xmlOrJsonToXml : xmlsOrJsons) { + TextType textType = getTextType(xmlOrJsonToXml); + final Map jsonOrXmlMap; + if (textType == TextType.JSON) { + jsonOrXmlMap = fromJsonMap(xmlOrJsonToXml); + } else if (textType == TextType.XML) { + jsonOrXmlMap = fromXmlMap(xmlOrJsonToXml); + } else { + continue; + } + resultXmlMap = U.update(resultXmlMap, jsonOrXmlMap); + } + return resultXmlMap.isEmpty() ? "" : Xml.toXml(resultXmlMap, identStep); + } + + public static String mergeXmlsOrJsonsToXml(List xmlsOrJsons) { + return mergeXmlsOrJsonsToXml(xmlsOrJsons, Xml.XmlStringBuilder.Step.TWO_SPACES); + } + @SuppressWarnings("unchecked") private static String getJsonString(Json.JsonStringBuilder.Step identStep, Object object) { final String result; diff --git a/src/test/java/com/github/underscore/LodashTest.java b/src/test/java/com/github/underscore/LodashTest.java index 8e905aee..235eeb2e 100644 --- a/src/test/java/com/github/underscore/LodashTest.java +++ b/src/test/java/com/github/underscore/LodashTest.java @@ -1106,6 +1106,66 @@ void xmlOrJsonToXml() { assertEquals("", U.xmlOrJsonToXml("")); } + @Test + void mergeXmlsOrJsonsToJson() { + assertEquals( + "{\n" + + " \"a\": {\n" + + " \"-self-closing\": \"true\"\n" + + " },\n" + + " \"#omit-xml-declaration\": \"yes\"\n" + + "}", + U.mergeXmlsOrJsonsToJson(List.of(""))); + assertEquals( + "{\n" + + " \"a\": {\n" + + " \"-self-closing\": \"true\"\n" + + " },\n" + + " \"#omit-xml-declaration\": \"yes\",\n" + + " \"b\": {\n" + + " \"-self-closing\": \"true\"\n" + + " }\n" + + "}", + U.mergeXmlsOrJsonsToJson(List.of("", ""))); + assertEquals( + "{\n" + + " \"value\": [\n" + + " ]\n" + + "}", + U.mergeXmlsOrJsonsToJson( + List.of("\n" + + ""))); + assertEquals("{\n \"a\": 1\n}", U.mergeXmlsOrJsonsToJson(List.of("{\"a\":1}"))); + assertEquals("{\n" + + " \"value\": [\n" + + " ]\n" + + "}", U.mergeXmlsOrJsonsToJson(List.of("[]"))); + assertEquals("", U.mergeXmlsOrJsonsToJson(List.of(""))); + } + + @Test + void mergeXmlsOrJsonsToXml() { + assertEquals("", U.mergeXmlsOrJsonsToXml(List.of(""))); + assertEquals("\n" + + " \n" + + " \n" + + "", U.mergeXmlsOrJsonsToXml(List.of("", ""))); + assertEquals( + "\n" + + "", + U.mergeXmlsOrJsonsToXml( + List.of("\n" + + ""))); + assertEquals( + "\n1", + U.mergeXmlsOrJsonsToXml(List.of("{\"a\":1}"))); + assertEquals( + "\n" + + "", + U.mergeXmlsOrJsonsToXml(List.of("[]"))); + assertEquals("", U.mergeXmlsOrJsonsToXml(List.of(""))); + } + @Test void removeMapKey() { Map map = new LinkedHashMap<>();