diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/variant/variantExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/variant/variantExpressions.scala index 43c561e10b6d2..8c0f72facc8c8 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/variant/variantExpressions.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/variant/variantExpressions.scala @@ -59,7 +59,7 @@ case class ParseJson(child: Expression, failOnError: Boolean = true) "parseJson", Seq(child, Literal(failOnError, BooleanType)), inputTypes :+ BooleanType, - returnNullable = false) + returnNullable = !failOnError) override def inputTypes: Seq[AbstractDataType] = StringType :: Nil diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/variant/VariantExpressionSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/variant/VariantExpressionSuite.scala index d001f0ec051eb..23293042f568b 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/variant/VariantExpressionSuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/expressions/variant/VariantExpressionSuite.scala @@ -807,6 +807,13 @@ class VariantExpressionSuite extends SparkFunSuite with ExpressionEvalHelper { "Hello") } + test("tryParseJson negative") { + checkEvaluation( + ParseJson(Literal("["), failOnError = false).replacement, + null + ) + } + test("cast to variant") { def check[T : TypeTag](input: T, expectedJson: String): Unit = { val cast = Cast(Literal.create(input), VariantType, evalMode = EvalMode.ANSI)