Skip to content

Commit d2ecc79

Browse files
authored
Added new mode XmlToJsonMode.REPLACE_MINUS_WITH_AT
1 parent db72394 commit d2ecc79

File tree

3 files changed

+63
-2
lines changed

3 files changed

+63
-2
lines changed

Diff for: checkstyle.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@
112112
-->
113113
<module name="AbbreviationAsWordInName">
114114
<property name="ignoreFinal" value="false"/>
115-
<property name="allowedAbbreviationLength" value="1"/>
115+
<property name="allowedAbbreviationLength" value="4"/>
116116
</module>
117117
<!--
118118
<module name="OverloadMethodsDeclarationOrder"/>

Diff for: src/main/java/com/github/underscore/U.java

+33-1
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,8 @@ public enum XmlToJsonMode {
140140
REPLACE_EMPTY_TAG_WITH_NULL,
141141
REPLACE_EMPTY_TAG_WITH_STRING,
142142
REMOVE_FIRST_LEVEL,
143-
WITHOUT_NAMESPACES
143+
WITHOUT_NAMESPACES,
144+
REPLACE_MINUS_WITH_AT
144145
}
145146

146147
public enum JsonToXmlMode {
@@ -2698,6 +2699,8 @@ public static String xmlToJson(
26982699
result = Json.toJson(replaceSelfClosingWithEmpty((Map) object), identStep);
26992700
} else if (mode == XmlToJsonMode.REPLACE_EMPTY_VALUE_WITH_NULL) {
27002701
result = Json.toJson(replaceEmptyValueWithNull((Map) object), identStep);
2702+
} else if (mode == XmlToJsonMode.REPLACE_MINUS_WITH_AT) {
2703+
result = Json.toJson(replaceMinusWithAt((Map) object), identStep);
27012704
} else if (mode == XmlToJsonMode.REPLACE_EMPTY_TAG_WITH_NULL) {
27022705
result =
27032706
Json.toJson(
@@ -2974,6 +2977,35 @@ private static Object makeObjectSelfClose(Object value, String newValue) {
29742977
return result;
29752978
}
29762979

2980+
public static Map<String, Object> replaceMinusWithAt(Map<String, Object> map) {
2981+
Map<String, Object> outMap = new LinkedHashMap<>();
2982+
for (Map.Entry<String, Object> entry : map.entrySet()) {
2983+
outMap.put(
2984+
String.valueOf(entry.getKey()).startsWith("-")
2985+
? "@" + String.valueOf(entry.getKey()).substring(1)
2986+
: String.valueOf(entry.getKey()),
2987+
replaceMinusWithAtValue(entry.getValue()));
2988+
}
2989+
return outMap;
2990+
}
2991+
2992+
@SuppressWarnings("unchecked")
2993+
private static Object replaceMinusWithAtValue(Object value) {
2994+
final Object result;
2995+
if (value instanceof List) {
2996+
List<Object> values = new ArrayList<>();
2997+
for (Object item : (List) value) {
2998+
values.add(item instanceof Map ? replaceMinusWithAt((Map) item) : item);
2999+
}
3000+
result = values;
3001+
} else if (value instanceof Map) {
3002+
result = replaceMinusWithAt((Map) value);
3003+
} else {
3004+
result = value;
3005+
}
3006+
return result;
3007+
}
3008+
29773009
public static Map<String, Object> replaceEmptyValueWithNull(Map<String, Object> map) {
29783010
if (map == null || map.isEmpty()) {
29793011
return null;

Diff for: src/test/java/com/github/underscore/LodashTest.java

+29
Original file line numberDiff line numberDiff line change
@@ -954,6 +954,35 @@ void xmlToJson() {
954954
U.replaceEmptyValueWithEmptyString(map4);
955955
}
956956

957+
@Test
958+
void xmpToJson3() {
959+
Map<String, Object> map2 = new LinkedHashMap<>();
960+
List<Object> list = new ArrayList<>();
961+
list.add(new ArrayList<Object>());
962+
map2.put("list", list);
963+
U.replaceMinusWithAt(map2);
964+
assertEquals(
965+
"{\n"
966+
+ " \"a\": {\n"
967+
+ " \"@c\": \"1\",\n"
968+
+ " \"b\": [\n"
969+
+ " {\n"
970+
+ " },\n"
971+
+ " {\n"
972+
+ " }\n"
973+
+ " ]\n"
974+
+ " },\n"
975+
+ " \"#omit-xml-declaration\": \"yes\"\n"
976+
+ "}",
977+
U.xmlToJson(
978+
"<a c=\"1\"><b></b><b></b></a>", U.XmlToJsonMode.REPLACE_MINUS_WITH_AT));
979+
Map<String, Object> map3 = new LinkedHashMap<>();
980+
List<Object> list2 = new ArrayList<>();
981+
list2.add(new ArrayList<Object>());
982+
map3.put("list", list2);
983+
U.replaceMinusWithAt(map3);
984+
}
985+
957986
@Test
958987
void xmlToJson2() {
959988
assertEquals(

0 commit comments

Comments
 (0)