Skip to content

Commit db5659e

Browse files
authored
Added methods U.xmlOrJsonToXml() and U.xmlOrJsonToJson()
1 parent 9cbb663 commit db5659e

File tree

2 files changed

+113
-6
lines changed

2 files changed

+113
-6
lines changed

src/main/java/com/github/underscore/U.java

Lines changed: 66 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2618,7 +2618,10 @@ public Object fromXml() {
26182618

26192619
@SuppressWarnings("unchecked")
26202620
public static String jsonToXml(
2621-
String json, Xml.XmlStringBuilder.Step identStep, JsonToXmlMode mode, String newRootName) {
2621+
String json,
2622+
Xml.XmlStringBuilder.Step identStep,
2623+
JsonToXmlMode mode,
2624+
String newRootName) {
26222625
Object object = Json.fromJson(json);
26232626
final String result;
26242627
if (object instanceof Map) {
@@ -2670,15 +2673,19 @@ public static String jsonToXml(String json, JsonToXmlMode mode, String newRootNa
26702673

26712674
public static String jsonToXml(String json, String newRootName) {
26722675
return jsonToXml(
2673-
json, Xml.XmlStringBuilder.Step.TWO_SPACES, JsonToXmlMode.DEFINE_ROOT_NAME, newRootName);
2676+
json,
2677+
Xml.XmlStringBuilder.Step.TWO_SPACES,
2678+
JsonToXmlMode.DEFINE_ROOT_NAME,
2679+
newRootName);
26742680
}
26752681

26762682
public static String jsonToXml(String json) {
26772683
return jsonToXml(json, Xml.XmlStringBuilder.Step.TWO_SPACES, null, null);
26782684
}
26792685

26802686
@SuppressWarnings("unchecked")
2681-
public static String xmlToJson(String xml, Json.JsonStringBuilder.Step identStep, XmlToJsonMode mode) {
2687+
public static String xmlToJson(
2688+
String xml, Json.JsonStringBuilder.Step identStep, XmlToJsonMode mode) {
26822689
Object object = Xml.fromXml(xml);
26832690
final String result;
26842691
if (object instanceof Map) {
@@ -2724,6 +2731,62 @@ public static String xmlToJson(String xml, XmlToJsonMode mode) {
27242731
return xmlToJson(xml, Json.JsonStringBuilder.Step.TWO_SPACES, mode);
27252732
}
27262733

2734+
public static String xmlOrJsonToJson(String xmlOrJson, Json.JsonStringBuilder.Step identStep) {
2735+
TextType textType = getTextType(xmlOrJson);
2736+
final String result;
2737+
if (textType == TextType.JSON) {
2738+
result = getJsonString(identStep, fromJson(xmlOrJson));
2739+
} else if (textType == TextType.XML) {
2740+
result = getJsonString(identStep, fromXml(xmlOrJson));
2741+
} else {
2742+
result = xmlOrJson;
2743+
}
2744+
return result;
2745+
}
2746+
2747+
public static String xmlOrJsonToJson(String xmlOrJson) {
2748+
return xmlOrJsonToJson(xmlOrJson, Json.JsonStringBuilder.Step.TWO_SPACES);
2749+
}
2750+
2751+
@SuppressWarnings("unchecked")
2752+
private static String getJsonString(Json.JsonStringBuilder.Step identStep, Object object) {
2753+
final String result;
2754+
if (object instanceof Map) {
2755+
result = Json.toJson((Map) object, identStep);
2756+
} else {
2757+
result = Json.toJson((List) object, identStep);
2758+
}
2759+
return result;
2760+
}
2761+
2762+
public static String xmlOrJsonToXml(String xmlOrJson, Xml.XmlStringBuilder.Step identStep) {
2763+
TextType textType = getTextType(xmlOrJson);
2764+
final String result;
2765+
if (textType == TextType.JSON) {
2766+
result = getXmlString(identStep, fromJson(xmlOrJson));
2767+
} else if (textType == TextType.XML) {
2768+
result = getXmlString(identStep, fromXml(xmlOrJson));
2769+
} else {
2770+
result = xmlOrJson;
2771+
}
2772+
return result;
2773+
}
2774+
2775+
public static String xmlOrJsonToXml(String xmlOrJson) {
2776+
return xmlOrJsonToXml(xmlOrJson, Xml.XmlStringBuilder.Step.TWO_SPACES);
2777+
}
2778+
2779+
@SuppressWarnings("unchecked")
2780+
private static String getXmlString(Xml.XmlStringBuilder.Step identStep, Object object) {
2781+
final String result;
2782+
if (object instanceof Map) {
2783+
result = Xml.toXml((Map) object, identStep);
2784+
} else {
2785+
result = Xml.toXml((List) object, identStep);
2786+
}
2787+
return result;
2788+
}
2789+
27272790
public enum TextType {
27282791
JSON,
27292792
XML,

src/test/java/com/github/underscore/LodashTest.java

Lines changed: 47 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -893,7 +893,8 @@ void xmlToJson() {
893893
+ " \"#omit-xml-declaration\": \"yes\"\n"
894894
+ "}",
895895
U.xmlToJson(
896-
"<c><b></b><b></b><a/></c>", U.XmlToJsonMode.REPLACE_EMPTY_TAG_WITH_STRING));
896+
"<c><b></b><b></b><a/></c>",
897+
U.XmlToJsonMode.REPLACE_EMPTY_TAG_WITH_STRING));
897898
assertEquals(
898899
"{\n" + " \"a\": \"\",\n" + " \"#omit-xml-declaration\": \"yes\"\n" + "}",
899900
U.xmlToJson("<a/>", U.XmlToJsonMode.REPLACE_SELF_CLOSING_WITH_STRING));
@@ -937,7 +938,8 @@ void xmlToJson() {
937938
+ " },\n"
938939
+ " \"#omit-xml-declaration\": \"yes\"\n"
939940
+ "}",
940-
U.xmlToJson("<a><b></b><b></b></a>", U.XmlToJsonMode.REPLACE_EMPTY_VALUE_WITH_NULL));
941+
U.xmlToJson(
942+
"<a><b></b><b></b></a>", U.XmlToJsonMode.REPLACE_EMPTY_VALUE_WITH_NULL));
941943
Map<String, Object> map3 = U.newLinkedHashMap();
942944
List<Object> list2 = U.newArrayList();
943945
list2.add(U.newArrayList());
@@ -959,6 +961,45 @@ void xmlToJson2() {
959961
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<debug>&amp;amp;</debug>"));
960962
}
961963

964+
@Test
965+
void xmlOrJsonToJson() {
966+
assertEquals(
967+
"{\n"
968+
+ " \"a\": {\n"
969+
+ " \"-self-closing\": \"true\"\n"
970+
+ " },\n"
971+
+ " \"#omit-xml-declaration\": \"yes\"\n"
972+
+ "}",
973+
U.xmlOrJsonToJson("<a/>"));
974+
assertEquals(
975+
"[\n]",
976+
U.xmlOrJsonToJson(
977+
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
978+
+ "<root empty-array=\"true\"></root>"));
979+
assertEquals("{\n" + " \"a\": 1\n" + "}", U.xmlOrJsonToJson("{\"a\":1}"));
980+
assertEquals("[\n]", U.xmlOrJsonToJson("[]"));
981+
assertEquals("", U.xmlOrJsonToJson(""));
982+
}
983+
984+
@Test
985+
void xmlOrJsonToXml() {
986+
assertEquals("<a/>", U.xmlOrJsonToXml("<a/>"));
987+
assertEquals(
988+
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
989+
+ "<root empty-array=\"true\"></root>",
990+
U.xmlOrJsonToXml(
991+
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
992+
+ "<root empty-array=\"true\"></root>"));
993+
assertEquals(
994+
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<a number=\"true\">1</a>",
995+
U.xmlOrJsonToXml("{\"a\":1}"));
996+
assertEquals(
997+
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
998+
+ "<root empty-array=\"true\"></root>",
999+
U.xmlOrJsonToXml("[]"));
1000+
assertEquals("", U.xmlOrJsonToXml(""));
1001+
}
1002+
9621003
@Test
9631004
void removeMapKey() {
9641005
Map<String, Object> map = U.newLinkedHashMap();
@@ -1006,7 +1047,10 @@ void renameRoot() {
10061047
U.jsonToXml("{\"a\": \"b\", \"c\": \"d\"}", "json"));
10071048
assertEquals(
10081049
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<json a=\"b\" c=\"d\"></json>",
1009-
U.jsonToXml("{\"a\": \"b\", \"c\": \"d\"}", U.JsonToXmlMode.FORCE_ATTRIBUTE_USAGE, "json"));
1050+
U.jsonToXml(
1051+
"{\"a\": \"b\", \"c\": \"d\"}",
1052+
U.JsonToXmlMode.FORCE_ATTRIBUTE_USAGE,
1053+
"json"));
10101054
}
10111055

10121056
@Test

0 commit comments

Comments
 (0)