Skip to content

Commit ff6ba69

Browse files
committed
add jackson identity passthrough for unchanged lazy values
fixes #2
1 parent 186d407 commit ff6ba69

3 files changed

Lines changed: 26 additions & 0 deletions

File tree

jjq-jackson/src/main/java/io/hyperfoil/tools/jjq/jackson/JacksonConverter.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,10 @@ public static JsonNode toJsonNode(JqValue value) {
101101
* for node creation.
102102
*/
103103
public static JsonNode toJsonNode(JqValue value, ObjectMapper mapper) {
104+
JsonNode original = LazyJacksonConverter.originalNodeIfLazy(value);
105+
if (original != null) {
106+
return original;
107+
}
104108
return switch (value) {
105109
case JqNull ignored -> NullNode.getInstance();
106110
case JqBoolean b -> BooleanNode.valueOf(b.booleanValue());

jjq-jackson/src/test/java/io/hyperfoil/tools/jjq/jackson/JacksonConverterTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,4 +165,13 @@ void roundTrip() throws Exception {
165165
assertEquals(original, restored);
166166
}
167167

168+
@Test
169+
void lazyIdentityPassthroughReturnsOriginalNode() throws Exception {
170+
JsonNode original = MAPPER.readTree("{\"name\":\"Alice\",\"age\":30}");
171+
JqValue lazy = JacksonConverter.fromJsonNodeLazy(original);
172+
173+
JsonNode restored = JacksonConverter.toJsonNode(lazy);
174+
assertSame(original, restored);
175+
}
176+
168177
}

jjq-jackson/src/test/java/io/hyperfoil/tools/jjq/jackson/LazyJacksonConverterTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,19 @@ void toJsonNodeDoesNotForceFullLazyObjectMaterialization() throws Exception {
131131
assertEquals(1, LazyJacksonConverter.convertedEntryCount(lazy));
132132
}
133133

134+
@Test
135+
void identityPassthroughAfterSingleFieldAccess() throws Exception {
136+
JsonNode node = MAPPER.readTree("{\"a\":1,\"b\":2,\"c\":3}");
137+
JqObject lazy = (JqObject) JacksonConverter.fromJsonNodeLazy(node);
138+
139+
assertEquals(JqNumber.of(2), lazy.get("b"));
140+
JsonNode restored = JacksonConverter.toJsonNode(lazy);
141+
142+
assertSame(node, restored);
143+
assertFalse(LazyJacksonConverter.isFullyConverted(lazy));
144+
assertEquals(1, LazyJacksonConverter.convertedEntryCount(lazy));
145+
}
146+
134147
@Test
135148
void toJsonStringWorks() throws Exception {
136149
JsonNode node = MAPPER.readTree("{\"a\":1,\"b\":[2,3]}");

0 commit comments

Comments
 (0)