From 9837c72aaf5c7d0d8c80615f0a255e6c5c449c63 Mon Sep 17 00:00:00 2001 From: Kalle Stenflo Date: Thu, 12 Mar 2015 13:16:16 +0100 Subject: [PATCH] Fixed issue #71 escape ' in inline criteria. --- .../main/java/com/jayway/jsonpath/Criteria.java | 6 +++++- .../java/com/jayway/jsonpath/old/IssuesTest.java | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/json-path/src/main/java/com/jayway/jsonpath/Criteria.java b/json-path/src/main/java/com/jayway/jsonpath/Criteria.java index 169c5857..135a8c51 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/Criteria.java +++ b/json-path/src/main/java/com/jayway/jsonpath/Criteria.java @@ -779,7 +779,11 @@ public class Criteria implements Predicate { } else if (leftNullish && rightNullish) { return 0; } else if (left instanceof String && right instanceof String) { - return ((String) left).compareTo((String) right); + String exp = (String)left; + if(exp.contains("\'")){ + exp = exp.replace("\\'", "'"); + } + return exp.compareTo((String) right); } else if (left instanceof Number && right instanceof Number) { return new BigDecimal(left.toString()).compareTo(new BigDecimal(right.toString())); } else if (left instanceof String && right instanceof Number) { diff --git a/json-path/src/test/java/com/jayway/jsonpath/old/IssuesTest.java b/json-path/src/test/java/com/jayway/jsonpath/old/IssuesTest.java index 2eb140ef..2e9d9843 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/old/IssuesTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/old/IssuesTest.java @@ -497,4 +497,20 @@ public class IssuesTest { Assertions.assertThat(problems).containsExactly("Chain does not have a discovery event. Possible it was cut by the date that was picked", "No start transcoding events found"); } + + @Test + public void issue_71() { + String json = "{\n" + + " \"logs\": [\n" + + " {\n" + + " \"message\": \"it's here\",\n" + + " \"id\": 2\n" + + " }\n" + + " ]\n" + + "}"; + + List result = JsonPath.read(json, "$.logs[?(@.message == 'it\\'s here')].message"); + + Assertions.assertThat(result).containsExactly("it's here"); + } }