From 2b66f23dd015f8270c60982bb005f0265bd09932 Mon Sep 17 00:00:00 2001 From: Kalle Stenflo Date: Wed, 14 Oct 2015 21:48:49 +0200 Subject: [PATCH] Using square bracket literal in path. --- .../com/jayway/jsonpath/internal/PathCompiler.java | 5 +---- .../java/com/jayway/jsonpath/old/IssuesTest.java | 13 +++++++++++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/PathCompiler.java b/json-path/src/main/java/com/jayway/jsonpath/internal/PathCompiler.java index 78e6a65f..88b6a107 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/PathCompiler.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/PathCompiler.java @@ -368,10 +368,7 @@ public class PathCompiler { while (path.inBounds(readPosition)) { char c = path.charAt(readPosition); - if (c == CLOSE_SQUARE_BRACKET) { - if (inProperty) { - throw new InvalidPathException("Expected property to be closed at position " + readPosition); - } + if (c == CLOSE_SQUARE_BRACKET && !inProperty) { break; } else if (c == TICK) { if (inProperty) { 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 e988ad73..cc3e046c 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 @@ -17,6 +17,7 @@ import com.jayway.jsonpath.spi.mapper.GsonMappingProvider; import com.jayway.jsonpath.spi.mapper.MappingException; import net.minidev.json.JSONAware; import net.minidev.json.parser.JSONParser; +import org.assertj.core.api.Assertions; import org.hamcrest.Matchers; import org.junit.Test; @@ -831,4 +832,16 @@ public class IssuesTest extends BaseTest { assertThat(result).containsExactly(1234); } + + + //https://groups.google.com/forum/#!topic/jsonpath/Ojv8XF6LgqM + @Test + public void using_square_bracket_literal_path() { + + String json = "{ \"valid key[@num = 2]\" : \"value\" }"; + + String result = JsonPath.read(json, "$['valid key[@num = 2]']"); + + Assertions.assertThat(result).isEqualTo("value"); + } }