You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by hv...@apache.org on 2016/12/02 16:41:45 UTC
spark git commit: [SPARK-18677] Fix parsing ['key'] in JSON path
expressions.
Repository: spark
Updated Branches:
refs/heads/master 2f8776cca -> 48778976e
[SPARK-18677] Fix parsing ['key'] in JSON path expressions.
## What changes were proposed in this pull request?
This fixes the parser rule to match named expressions, which doesn't work for two reasons:
1. The name match is not coerced to a regular expression (missing .r)
2. The surrounding literals are incorrect and attempt to escape a single quote, which is unnecessary
## How was this patch tested?
This adds test cases for named expressions using the bracket syntax, including one with quoted spaces.
Author: Ryan Blue <bl...@apache.org>
Closes #16107 from rdblue/SPARK-18677-fix-json-path.
Project: http://git-wip-us.apache.org/repos/asf/spark/repo
Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/48778976
Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/48778976
Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/48778976
Branch: refs/heads/master
Commit: 48778976e0566d9c93a8c900825def82c6b81fd6
Parents: 2f8776c
Author: Ryan Blue <bl...@apache.org>
Authored: Fri Dec 2 08:41:40 2016 -0800
Committer: Herman van Hovell <hv...@databricks.com>
Committed: Fri Dec 2 08:41:40 2016 -0800
----------------------------------------------------------------------
.../catalyst/expressions/jsonExpressions.scala | 2 +-
.../expressions/JsonExpressionsSuite.scala | 24 ++++++++++++++++++++
2 files changed, 25 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/spark/blob/48778976/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/jsonExpressions.scala
----------------------------------------------------------------------
diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/jsonExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/jsonExpressions.scala
index b61583d..667ff64 100644
--- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/jsonExpressions.scala
+++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/jsonExpressions.scala
@@ -69,7 +69,7 @@ private[this] object JsonPathParser extends RegexParsers {
// parse `.name` or `['name']` child expressions
def named: Parser[List[PathInstruction]] =
for {
- name <- '.' ~> "[^\\.\\[]+".r | "[\\'" ~> "[^\\'\\?]+" <~ "\\']"
+ name <- '.' ~> "[^\\.\\[]+".r | "['" ~> "[^\\'\\?]+".r <~ "']"
} yield {
Key :: Named(name) :: Nil
}
http://git-wip-us.apache.org/repos/asf/spark/blob/48778976/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/JsonExpressionsSuite.scala
----------------------------------------------------------------------
diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/JsonExpressionsSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/JsonExpressionsSuite.scala
index 3b0e908..618b8b2 100644
--- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/JsonExpressionsSuite.scala
+++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/JsonExpressionsSuite.scala
@@ -43,6 +43,30 @@ class JsonExpressionsSuite extends SparkFunSuite with ExpressionEvalHelper {
"""{"price":19.95,"color":"red"}""")
}
+ test("$['store'].bicycle") {
+ checkEvaluation(
+ GetJsonObject(Literal(json), Literal("$['store'].bicycle")),
+ """{"price":19.95,"color":"red"}""")
+ }
+
+ test("$.store['bicycle']") {
+ checkEvaluation(
+ GetJsonObject(Literal(json), Literal("$.store['bicycle']")),
+ """{"price":19.95,"color":"red"}""")
+ }
+
+ test("$['store']['bicycle']") {
+ checkEvaluation(
+ GetJsonObject(Literal(json), Literal("$['store']['bicycle']")),
+ """{"price":19.95,"color":"red"}""")
+ }
+
+ test("$['key with spaces']") {
+ checkEvaluation(GetJsonObject(
+ Literal("""{ "key with spaces": "it works" }"""), Literal("$['key with spaces']")),
+ "it works")
+ }
+
test("$.store.book") {
checkEvaluation(
GetJsonObject(Literal(json), Literal("$.store.book")),
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org