diff --git a/json-path/src/main/java/com/jayway/jsonpath/internal/path/PathCompiler.java b/json-path/src/main/java/com/jayway/jsonpath/internal/path/PathCompiler.java index 27b6e063..a910374f 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/internal/path/PathCompiler.java +++ b/json-path/src/main/java/com/jayway/jsonpath/internal/path/PathCompiler.java @@ -353,6 +353,7 @@ else if (isPathContext(c)) { if (0 > groupParen || priorChar == '(') { parameter.append(c); } + if(groupParen > 0) break; case COMMA: // In this state we've reach the end of a function parameter and we can pass along the parameter string // to the parser diff --git a/json-path/src/test/java/com/jayway/jsonpath/PathCompilerTest.java b/json-path/src/test/java/com/jayway/jsonpath/PathCompilerTest.java index ef220619..419b9bc1 100644 --- a/json-path/src/test/java/com/jayway/jsonpath/PathCompilerTest.java +++ b/json-path/src/test/java/com/jayway/jsonpath/PathCompilerTest.java @@ -323,4 +323,11 @@ public void accept_only_a_single_comma_between_indexes() { public void property_must_be_separated_by_commas() { compile("$['aaa'}'bbb']"); } + + @Test + public void function_parameter_with_closing_paren() { + String json = "{}"; + String result = JsonPath.read(json, "$.concat(\"Bob\", $.concat(\" Joe\", \" Alex\"))"); + assertThat(result).isEqualTo("Bob Joe Alex"); + } }