diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/path/EvaluationContextImpl.java b/json-path/src/main/java/com/jayway/jsonpath/internal/path/EvaluationContextImpl.java index d3fd0b1c..30730505 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/path/EvaluationContextImpl.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/path/EvaluationContextImpl.java @@ -119,7 +119,7 @@ public class EvaluationContextImpl implements EvaluationContext { public Collection updateOperations(){ - Collections.sort(updateOperations); + Collections.reverse(updateOperations); return Collections.unmodifiableCollection(updateOperations); } diff --git a/json-path/src/test/java/com/jayway/jsonpath/issue/Issue565.java b/json-path/src/test/java/com/jayway/jsonpath/issue/Issue565.java new file mode 100644 index 00000000..bb38ab6a --- /dev/null +++ b/json-path/src/test/java/com/jayway/jsonpath/issue/Issue565.java @@ -0,0 +1,37 @@ +package com.jayway.jsonpath.issue; + +import com.jayway.jsonpath.JsonPath; +import com.jayway.jsonpath.ReadContext; +import org.junit.Test; + +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +public class Issue565 { + + @Test + public void test_issue_565() { + String json = "{\n" + + " \"oldName\": {\n" + + " \"oldName\": {\n" + + " \"oldName\": {\n" + + " \"otherName\": \"value\"\n" + + " }\n" + + " }\n" + + " }\n" + + "}"; + String jsonPath = "$..[?(@.oldName)]"; + String oldKeyName = "oldName"; + String newKeyName = "newName"; + ReadContext context = JsonPath.parse(json).renameKey(jsonPath, oldKeyName, newKeyName); + List result = context.read("$..[?(@.newName)]"); + + assertEquals(3, result.size()); + + assertNotNull(context.read("$.newName")); + assertNotNull(context.read("$.newName.newName")); + assertNotNull(context.read("$.newName.newName.newName")); + } +}