将给定的复杂类型expr,以JSON字符串格式输出。
命令格式
STRING TO_JSON(<expr>)
参数说明
expr:必填。ARRAY、MAP、STRUCT复杂类型。
如果输入为STRUCT类型(struct<key1:value1, key2:value2
):
转换为JSON字符串时,Key会全部转为小写。
value
如果为NULL,则不输出value
本组的数据。例如value2
为NULL,则key2:value2
不会输出到JSON字符串。执行
SET odps.sql.bigquery.compatible=true;
命令打开BigQuery兼容模式,在该模式下value如果为NULL,输出value本组的数据。例如value2为NULL,则输出key2:NULL。
返回值说明
返回JSON格式的字符串。
使用示例
示例1:将指定复杂类型以指定格式输出。命令示例如下。
--返回{"a":1,"b":2}。 SELECT TO_JSON(NAMED_STRUCT('a', 1, 'b', 2)); --返回{"time":"26/08/2015"}。 SELECT TO_JSON(NAMED_STRUCT('time', "26/08/2015")); --返回[{"a":1,"b":2}]。 SELECT TO_JSON(ARRAY(NAMED_STRUCT('a', 1, 'b', 2))); --返回{"a":{"b":1}}。 SELECT TO_JSON(MAP('a', NAMED_STRUCT('b', 1))); --返回{"a":1}。 SELECT TO_JSON(MAP('a', 1)); --返回[{"a":1}]。 SELECT TO_JSON(ARRAY((MAP('a', 1))));
示例2:输入为STRUCT类型的特殊情况。命令示例如下。
-- 返回{"a":"B"}。STRUCT类型转换为JSON字符串时,key会全部转为小写。 SELECT TO_JSON(NAMED_STRUCT("A", "B")); -- 返回{"k2":"v2"}。NULL值所在组的数据,不会输出到JSON字符串。 SELECT TO_JSON(NAMED_STRUCT("k1", CAST(NULL AS STRING), "k2", "v2"));
示例3:BigQuery兼容模式下,NULL值所在组的数据,会输出到JSON字符串。命令示例如下。
-- 返回 {"k1":null,"k2":"v2"} SET odps.sql.bigquery.compatible=true; SELECT TO_JSON(named_struct("k1", CAST(NULL AS STRING), "k2", "v2")); -- 返回{"id":null,"tag":null,"group":null,"success":true} SET odps.sql.bigquery.compatible=true; SELECT TO_JSON(struct(experiment_id AS id,tag AS tag,`group`,`success`)) AS experiment_in_json FROM( SELECT CAST(NULL AS string) AS experiment_id, CAST(NULL AS string) AS tag, CAST(NULL AS string) AS `group`, TRUE AS `success` );
该文章对您有帮助吗?