Skip to content

Commit 1155780

Browse files
authored
Add check for #item in U.get(map).
1 parent 49e165b commit 1155780

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1357,6 +1357,11 @@ private static <T> T baseGet(final Map<String, Object> object, final String path
13571357
Object localObject = object;
13581358
while (localObject != null && index < length) {
13591359
if (localObject instanceof Map) {
1360+
Map.Entry mapEntry = getMapEntry((Map) localObject);
1361+
if (mapEntry != null && "#item".equals(mapEntry.getKey())) {
1362+
localObject = mapEntry.getValue();
1363+
continue;
1364+
}
13601365
localObject = ((Map) localObject).get(paths.get(index));
13611366
} else if (localObject instanceof List) {
13621367
localObject = ((List) localObject).get(Integer.parseInt(paths.get(index)));
@@ -1371,6 +1376,10 @@ private static <T> T baseGet(final Map<String, Object> object, final String path
13711376
return null;
13721377
}
13731378

1379+
private static Map.Entry getMapEntry(Map map) {
1380+
return map.isEmpty() ? null : (Map.Entry) map.entrySet().iterator().next();
1381+
}
1382+
13741383
public static <T> T get(final Map<String, Object> object, final String path) {
13751384
return baseGet(object, path);
13761385
}

src/test/java/com/github/underscore/lodash/StringTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2167,6 +2167,34 @@ public void toJsonFromXml25() {
21672167
assertEquals(json, U.toJson((Map<String, Object>) U.fromXml(xml)));
21682168
}
21692169

2170+
@SuppressWarnings("unchecked")
2171+
@Test
2172+
public void toJsonFromXml26() {
2173+
final String json = "{\n"
2174+
+ " \"a\": {\n"
2175+
+ " \"b\": [\n"
2176+
+ " {},\n"
2177+
+ " {\n"
2178+
+ " \"#item\": {\n"
2179+
+ " \"#text\": \"\\n1\"\n"
2180+
+ " }\n"
2181+
+ " },\n"
2182+
+ " {\n"
2183+
+ " \"#item\": null\n"
2184+
+ " },\n"
2185+
+ " \"c\"\n"
2186+
+ " ],\n"
2187+
+ " \"d\": null"
2188+
+ " }\n"
2189+
+ "}";
2190+
Map<String, Object> map = (Map<String, Object>) U.fromJson(json);
2191+
assertNull(U.get(map, "a.b.0.#text"));
2192+
assertEquals("\n1", U.get(map, "a.b.1.#text"));
2193+
assertEquals("{#item=null}", U.get(map, "a.b.2").toString());
2194+
assertEquals("c", U.get(map, "a.b.3"));
2195+
assertNull(U.get(map, "a.d"));
2196+
}
2197+
21702198
@SuppressWarnings("unchecked")
21712199
@Test
21722200
public void toXmlFromJson() {

0 commit comments

Comments
 (0)