diff --git a/json-path-assert/pom.xml b/json-path-assert/pom.xml index a17e162e..99def780 100644 --- a/json-path-assert/pom.xml +++ b/json-path-assert/pom.xml @@ -14,7 +14,8 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> - + 4.0.0 json-path-parent @@ -33,18 +34,6 @@ ${project.version} - - junit - junit - test - - - net.minidev json-smart @@ -54,5 +43,11 @@ org.hamcrest hamcrest-library + + + junit + junit + test + diff --git a/json-path/pom.xml b/json-path/pom.xml index 08a6b241..c771f6bd 100644 --- a/json-path/pom.xml +++ b/json-path/pom.xml @@ -14,7 +14,8 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> - + 4.0.0 com.jayway.jsonpath @@ -48,15 +49,17 @@ + + - junit - junit + org.hamcrest + hamcrest-library test - org.hamcrest - hamcrest-library + junit + junit test diff --git a/json-path/src/main/java/com/jayway/jsonpath/reader/PathTokenizer.java b/json-path/src/main/java/com/jayway/jsonpath/reader/PathTokenizer.java index cc7a7428..784f3a10 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/reader/PathTokenizer.java +++ b/json-path/src/main/java/com/jayway/jsonpath/reader/PathTokenizer.java @@ -33,7 +33,7 @@ public class PathTokenizer implements Iterable { } } - public List getFragments(){ + public List getFragments() { List fragments = new LinkedList(); for (PathToken pathToken : pathTokens) { fragments.add(pathToken.getFragment()); @@ -106,17 +106,28 @@ public class PathTokenizer implements Iterable { private String extract(boolean includeSopChar, char... stopChars) { + + StringBuilder sb = new StringBuilder(); while (!isEmpty() && (!isStopChar(peek(), stopChars))) { - char c = poll(); - if (isStopChar(c, stopChars)) { - if (includeSopChar) { + if (peek() == '(') { + do { + sb.append(poll()); + } while (peek() != ')'); + sb.append(poll()); + } else { + + char c = poll(); + + if (isStopChar(c, stopChars)) { + if (includeSopChar) { + sb.append(c); + } + } else { sb.append(c); } - } else { - sb.append(c); } } if (includeSopChar) { diff --git a/json-path/src/main/java/com/jayway/jsonpath/reader/filter/ArrayEvalFilter.java b/json-path/src/main/java/com/jayway/jsonpath/reader/filter/ArrayEvalFilter.java index 6be24054..0457d4e7 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/reader/filter/ArrayEvalFilter.java +++ b/json-path/src/main/java/com/jayway/jsonpath/reader/filter/ArrayEvalFilter.java @@ -29,7 +29,14 @@ public class ArrayEvalFilter extends Filter { List src = jsonProvider.toList(obj); List result = jsonProvider.createList(); - String trimmedCondition = trim(condition, 5, 2); + String trimmedCondition = condition; + + if(condition.contains("['")){ + trimmedCondition = trimmedCondition.replace("['", "."); + trimmedCondition = trimmedCondition.replace("']", ""); + } + + trimmedCondition = trim(trimmedCondition, 5, 2); ConditionStatement conditionStatement = createConditionStatement(trimmedCondition); diff --git a/json-path/src/main/java/com/jayway/jsonpath/reader/filter/HasFieldFilter.java b/json-path/src/main/java/com/jayway/jsonpath/reader/filter/HasFieldFilter.java index cb6c609f..627612ec 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/reader/filter/HasFieldFilter.java +++ b/json-path/src/main/java/com/jayway/jsonpath/reader/filter/HasFieldFilter.java @@ -24,7 +24,14 @@ public class HasFieldFilter extends Filter { List src = jsonProvider.toList(obj); List result = jsonProvider.createList(); - String trimmedCondition = trim(condition, 5, 2); + String trimmedCondition = condition; + + if(condition.contains("['")){ + trimmedCondition = trimmedCondition.replace("['", "."); + trimmedCondition = trimmedCondition.replace("']", ""); + } + + trimmedCondition = trim(trimmedCondition, 5, 2); for (Object item : src) { if(jsonProvider.isMap(item)){ diff --git a/json-path/src/test/java/com/jayway/jsonpath/JsonPathTest.java b/json-path/src/test/java/com/jayway/jsonpath/JsonPathTest.java index 20926456..db9a3ac9 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/JsonPathTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/JsonPathTest.java @@ -1,5 +1,6 @@ package com.jayway.jsonpath; +import com.jayway.jsonpath.reader.PathTokenizer; import com.jayway.jsonpath.util.ScriptEngineJsonPath; import org.junit.Test; @@ -212,7 +213,9 @@ public class JsonPathTest { @Test public void all_books_cheaper_than_10() throws Exception { + assertThat(JsonPath.>read(DOCUMENT, "$..book[?(@['display-price'] < 10)].title"), hasItems("Sayings of the Century", "Moby Dick")); + assertThat(JsonPath.>read(DOCUMENT, "$..book[?(@.display-price < 10)].title"), hasItems("Sayings of the Century", "Moby Dick")); } diff --git a/json-path/src/test/java/com/jayway/jsonpath/SplitPathFragmentsTest.java b/json-path/src/test/java/com/jayway/jsonpath/SplitPathFragmentsTest.java index 910f6bc3..8e5b4cc0 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/SplitPathFragmentsTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/SplitPathFragmentsTest.java @@ -19,6 +19,27 @@ public class SplitPathFragmentsTest { private JsonProvider jsonProvider = JsonProvider.getInstance(); + + @Test + public void array_filter_bracket_test() throws Exception { + + + PathTokenizer tokenizer = new PathTokenizer("$.store.book[?(@['isbn'])].isbn", jsonProvider); + //PathTokenizer tokenizer = new PathTokenizer("$.store.book[?(@.isbn)].isbn", jsonProvider); + + for (String fragment : tokenizer.getFragments()) { + System.out.println(fragment); + } + + //assertThat(tokenizer.getFragments(), hasItems("$", "store", "[*]")); + + + + } + + + + @Test public void valid_path_is_split_correctly() throws Exception { diff --git a/pom.xml b/pom.xml index d046f672..0804797c 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,8 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> - + 4.0.0 org.sonatype.oss @@ -31,7 +32,7 @@ 2011 GitHub Issue Tracking - + @@ -165,12 +166,23 @@ jackson-mapper-asl 1.7.1 - + + + org.hamcrest + hamcrest-library + 1.2.1 + + + org.hamcrest + hamcrest-core + 1.2.1 + commons-lang @@ -181,7 +193,7 @@ junit junit - 4.8.2 + 4.10 test