TO_JSON

将给定的复杂类型expr,以JSON字符串格式输出。

命令格式

STRING TO_JSON(<expr>)

参数说明

expr:必填。ARRAY、MAP、STRUCT复杂类型。

如果输入为STRUCT类型(struct<key1:value1, key2:value2):

  • 转换为JSON字符串时,Key会全部转为小写。

  • value如果为NULL,则不输出value本组的数据。例如value2NULL,则key2:value2不会输出到JSON字符串。

  • 执行SET odps.sql.bigquery.compatible=true;命令打开BigQuery兼容模式,在该模式下value如果为NULL,输出value本组的数据。例如value2NULL,则输出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`
    );