diff --git a/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/JsonFunctionsITCase.java b/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/JsonFunctionsITCase.java index 5108fcdac3dcf..b8780a34059ad 100644 --- a/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/JsonFunctionsITCase.java +++ b/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/JsonFunctionsITCase.java @@ -447,6 +447,33 @@ private static List jsonQuerySpec() { "JSON_QUERY(f0, '$.a' RETURNING ARRAY WITHOUT WRAPPER EMPTY ARRAY ON ERROR)", new String[] {}, DataTypes.ARRAY(DataTypes.STRING())), + + // stringifying RETURNING + TestSetSpec.forFunction(BuiltInFunctionDefinitions.JSON_QUERY) + .onFieldsWithData( + "{\"items\": [{\"itemId\":1234, \"count\":10}, null, {\"itemId\":4567, \"count\":11}]}", + "{\"items\": [[1234, 2345], null, [\"itemId\", \"count\"]]}", + "{\"arr\": [\"abc\", null, \"def\"]}") + .andDataTypes(STRING(), STRING(), STRING()) + .testResult( + $("f0").jsonQuery("$.items", ARRAY(STRING())), + "JSON_QUERY(f0, '$.items' RETURNING ARRAY)", + new String[] { + "{\"itemId\":1234,\"count\":10}", + null, + "{\"itemId\":4567,\"count\":11}" + }, + ARRAY(STRING())) + .testResult( + $("f1").jsonQuery("$.items", ARRAY(STRING())), + "JSON_QUERY(f1, '$.items' RETURNING ARRAY)", + new String[] {"[1234,2345]", null, "[\"itemId\",\"count\"]"}, + ARRAY(STRING())) + .testResult( + $("f2").jsonQuery("$.arr", ARRAY(STRING())), + "JSON_QUERY(f2, '$.arr' RETURNING ARRAY)", + new String[] {"abc", null, "def"}, + ARRAY(STRING())), TestSetSpec.forFunction(BuiltInFunctionDefinitions.JSON_QUERY) .onFieldsWithData(jsonValue) .andDataTypes(STRING()) diff --git a/flink-table/flink-table-runtime/src/main/java/org/apache/flink/table/runtime/functions/SqlJsonUtils.java b/flink-table/flink-table-runtime/src/main/java/org/apache/flink/table/runtime/functions/SqlJsonUtils.java index 2169f5c470ac5..09cb0009bf1d6 100644 --- a/flink-table/flink-table-runtime/src/main/java/org/apache/flink/table/runtime/functions/SqlJsonUtils.java +++ b/flink-table/flink-table-runtime/src/main/java/org/apache/flink/table/runtime/functions/SqlJsonUtils.java @@ -265,7 +265,13 @@ private static Object jsonQuery( for (int i = 0; i < list.size(); i++) { final Object el = list.get(i); if (el != null) { - arr[i] = StringData.fromString(el.toString()); + final String stringifiedEl; + if (isScalarObject(el)) { + stringifiedEl = String.valueOf(el); + } else { + stringifiedEl = jsonize(el); + } + arr[i] = StringData.fromString(stringifiedEl); } }