Skip to content

Commit 8baa95a

Browse files
committed
Sync with underscore-java
1 parent 8c98771 commit 8baa95a

File tree

4 files changed

+80
-4
lines changed

4 files changed

+80
-4
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -404,8 +404,8 @@ private static void escape(String s, StringBuilder sb) {
404404
case '\t':
405405
sb.append("\\t");
406406
break;
407-
case '':
408-
sb.append('');
407+
case '\u20AC':
408+
sb.append('\u20AC');
409409
break;
410410
default:
411411
if (ch <= '\u001F'

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

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,9 @@ 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,
145+
REPLACE_EMPTY_TAG_WITH_NULL_AND_MINUS_WITH_AT
144146
}
145147

146148
public enum JsonToXmlMode {
@@ -2698,6 +2700,15 @@ public static String xmlToJson(
26982700
result = Json.toJson(replaceSelfClosingWithEmpty((Map) object), identStep);
26992701
} else if (mode == XmlToJsonMode.REPLACE_EMPTY_VALUE_WITH_NULL) {
27002702
result = Json.toJson(replaceEmptyValueWithNull((Map) object), identStep);
2703+
} else if (mode == XmlToJsonMode.REPLACE_MINUS_WITH_AT) {
2704+
result = Json.toJson(replaceMinusWithAt((Map) object), identStep);
2705+
} else if (mode == XmlToJsonMode.REPLACE_EMPTY_TAG_WITH_NULL_AND_MINUS_WITH_AT) {
2706+
result =
2707+
Json.toJson(
2708+
replaceMinusWithAt(
2709+
replaceEmptyValueWithNull(
2710+
replaceSelfClosingWithNull((Map) object))),
2711+
identStep);
27012712
} else if (mode == XmlToJsonMode.REPLACE_EMPTY_TAG_WITH_NULL) {
27022713
result =
27032714
Json.toJson(
@@ -2974,6 +2985,38 @@ private static Object makeObjectSelfClose(Object value, String newValue) {
29742985
return result;
29752986
}
29762987

2988+
public static Map<String, Object> replaceMinusWithAt(Map<String, Object> map) {
2989+
if (map == null) {
2990+
return null;
2991+
}
2992+
Map<String, Object> outMap = new LinkedHashMap<>();
2993+
for (Map.Entry<String, Object> entry : map.entrySet()) {
2994+
outMap.put(
2995+
String.valueOf(entry.getKey()).startsWith("-")
2996+
? "@" + String.valueOf(entry.getKey()).substring(1)
2997+
: String.valueOf(entry.getKey()),
2998+
replaceMinusWithAtValue(entry.getValue()));
2999+
}
3000+
return outMap;
3001+
}
3002+
3003+
@SuppressWarnings("unchecked")
3004+
private static Object replaceMinusWithAtValue(Object value) {
3005+
final Object result;
3006+
if (value instanceof List) {
3007+
List<Object> values = new ArrayList<>();
3008+
for (Object item : (List) value) {
3009+
values.add(item instanceof Map ? replaceMinusWithAt((Map) item) : item);
3010+
}
3011+
result = values;
3012+
} else if (value instanceof Map) {
3013+
result = replaceMinusWithAt((Map) value);
3014+
} else {
3015+
result = value;
3016+
}
3017+
return result;
3018+
}
3019+
29773020
public static Map<String, Object> replaceEmptyValueWithNull(Map<String, Object> map) {
29783021
if (map == null || map.isEmpty()) {
29793022
return null;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1029,7 +1029,7 @@ private static void escape(String s, StringBuilder sb) {
10291029
case '\t':
10301030
sb.append("\t");
10311031
break;
1032-
case '':
1032+
case '\u20AC':
10331033
sb.append("€");
10341034
break;
10351035
default:

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

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -954,6 +954,39 @@ 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+
U.replaceMinusWithAt(null);
985+
U.xmlToJson(
986+
"<a c=\"1\"><b></b><b></b></a>",
987+
U.XmlToJsonMode.REPLACE_EMPTY_TAG_WITH_NULL_AND_MINUS_WITH_AT);
988+
}
989+
957990
@Test
958991
void xmlToJson2() {
959992
assertEquals(

0 commit comments

Comments
 (0)