根据JSON字符串jsonStrschema信息,返回ARRAY、MAP或STRUCT类型。

命令格式

from_json(<jsonStr>, <schema>)

参数说明

  • jsonStr:必填。输入的JSON字符串。

  • schema:必填。写法与建表语句的类型一致。例如array<bigint>map<string, array<string>>struct<a:int, b:double, `C`:map<string,string>>

    说明

    STRUCT的Key区分大小写。此外,STRUCT类型还有一种写法a bigint, b double,等同于struct<a:bigint, b:double>

    JSON数据类型与MaxCompute数据类型的对应关系如下。

    JSON数据类型

    MaxCompute数据类型

    OBJECT

    STRUCT、MAP、STRING

    ARRAY

    ARRAY、STRING

    NUMBER

    TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE、DECIMAL、STRING

    BOOLEAN

    BOOLEAN、STRING

    STRING

    STRING、CHAR、VARCHAR、BINARY、DATE、DATETIME

    NULL

    所有类型

    说明

    对于OBJECT和ARRAY类型,会采用尽可能解析的方式,不匹配的类型会忽略。为了便于使用,所有的JSON类型都可以转换为MaxCompute的STRING类型。同时您需要注意,对应FLOAT、DOUBLE、DECIMAL三种数据类型无法保证小数的精度,如果需要确保精度可使用老版本GET_JSON_OBJECT,或者用STRING类型取出数据,再转换为对应数值类型。

返回值说明

返回ARRAY、MAP或STRUCT类型。

FROM_JSON

  • 示例1:将指定JSON字符串以指定格式输出。命令示例如下。

    --返回{a:1,b:0.8}。
    select from_json('{"a":1, "b":0.8}', 'a int, b double');
    
    --返回{time:26/08/2015}。
    select from_json('{"time":"26/08/2015"}', 'time string');
    
    --返回{a:1, b:0.8, c:NULL}。
    select from_json('{"a":1, "b":0.8}', 'a int, b double, c string');
    
    --返回[1,2,3]。
    select from_json('[1, 2, 3, "a"]', 'array<bigint>');
    
    --返回{a:1, b:[1,2,3], c:{}, d:v}。
    select from_json('{"a":1,"b":[1,2,3],"c":{},"d":"v"}', 'map<string, string>');
  • 示例2:使用map_keys函数和from_json函数实现类似JSON_KEYS的作用,获取JSON字符串中所有key的集合。命令示例如下。

    --返回[a, b]。
    select map_keys(from_json('{"a":1,"b":2}','map<string,string>'));

相关函数

FROM_JSON函数属于复杂类型函数或字符串函数。

  • 更多对复杂类型数据(例如ARRAY、MAP、STRUCT、JSON数据)的处理函数请参见复杂类型函数

  • 更多查找字符串、转换字符串格式的相关函数请参见字符串函数