Skip to content

Commit ae8dc01

Browse files
authored
Merge pull request #1890 from eclipse-ditto/bugfix/1888-retrieving-arrays-in-fieldselectors
#1888 fix retrieving simple arrays via field selectors
2 parents 023f931 + feba669 commit ae8dc01

File tree

2 files changed

+64
-2
lines changed

2 files changed

+64
-2
lines changed

json/src/main/java/org/eclipse/ditto/json/ImmutableJsonObject.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -432,8 +432,8 @@ private static JsonObject filterByTrie(final JsonObject self, final JsonFieldSel
432432
filteredChildValue = filterByTrie(childValue.asObject(), trie.descend(key)); // recurse!
433433
} else if (childValue.isArray()) {
434434
filteredChildValue = childValue.asArray().stream()
435-
.filter(JsonValue::isObject)
436-
.map(value -> filterByTrie(value.asObject(), trie.descend(key))) // recurse!
435+
.map(value -> value.isObject() ? filterByTrie(value.asObject(), trie.descend(key)) // recurse!
436+
: value)
437437
.collect(JsonCollectors.valuesToArray());
438438
} else {
439439
filteredChildValue = childValue;

json/src/test/java/org/eclipse/ditto/json/ImmutableJsonObjectTest.java

+62
Original file line numberDiff line numberDiff line change
@@ -1433,6 +1433,68 @@ public void partiallyIntersectingPointersHaveNoEffectInFieldSelector() {
14331433
assertThat(actual).isEqualTo(underTest.remove("x"));
14341434
}
14351435

1436+
@Test
1437+
public void nestedObjectsInsideArraysAreSelectedWhenSelectingViaFieldSelector() {
1438+
final JsonObject underTest = JsonObject.newBuilder()
1439+
.set("some", JsonObject.newBuilder()
1440+
.set("nested", JsonArray.newBuilder()
1441+
.add(JsonObject.newBuilder()
1442+
.set("a", 1)
1443+
.set("b", 2)
1444+
.set("c", 3)
1445+
.build()
1446+
)
1447+
.add(JsonObject.newBuilder()
1448+
.set("a", 11)
1449+
.set("b", 22)
1450+
.set("c", 33)
1451+
.build()
1452+
)
1453+
.build())
1454+
.build()
1455+
)
1456+
.set("other", "foo")
1457+
.build();
1458+
1459+
final JsonFieldSelector selectorSelectingArray =
1460+
JsonFieldSelector.newInstance("some/nested/b");
1461+
final JsonObject actual = underTest.get(selectorSelectingArray);
1462+
1463+
final JsonObject expected = JsonObject.newBuilder()
1464+
.set("some", JsonObject.newBuilder()
1465+
.set("nested", JsonArray.newBuilder()
1466+
.add(JsonObject.newBuilder()
1467+
.set("b", 2)
1468+
.build()
1469+
)
1470+
.add(JsonObject.newBuilder()
1471+
.set("b", 22)
1472+
.build()
1473+
)
1474+
.build())
1475+
.build()
1476+
)
1477+
.build();
1478+
assertThat(actual).isEqualTo(expected);
1479+
}
1480+
1481+
@Test
1482+
public void simpleArraysArePreservedWhenSelectingViaFieldSelector() {
1483+
final JsonObject underTest = JsonObject.newBuilder()
1484+
.set("some", JsonObject.newBuilder()
1485+
.set("nested", JsonArray.newBuilder()
1486+
.add(1, 2, 3)
1487+
.build())
1488+
.build()
1489+
)
1490+
.set("other", "foo")
1491+
.build();
1492+
final JsonFieldSelector selectorSelectingArray =
1493+
JsonFieldSelector.newInstance("some/nested");
1494+
final JsonObject actual = underTest.get(selectorSelectingArray);
1495+
assertThat(actual).isEqualTo(underTest.remove("other"));
1496+
}
1497+
14361498
@Test
14371499
public void jsonObjectsNestedInArraysShouldCompareWithoutFieldDefinitions() {
14381500
final JsonObject objectWithoutDefinition =

0 commit comments

Comments
 (0)