全部產品
Search
文件中心

MaxCompute:FROM_JSON

更新時間:Aug 09, 2024

根據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資料)的處理函數請參見複雜類型函數

  • 更多尋找字串、轉換字串格式的相關函數請參見字串函數