数据湖探索 DLI-get_json_object:示例代码

时间:2024-11-08 09:33:25

示例代码

  • 提取JSON对象src_json.json中的信息。命令示例如下。
    jsonString = {"store": {"fruit":[{"weight":8,"type":"apple"},{"weight":9,"type":"pear"}], "bicycle":{"price":19.95,"color":"red"} }, "email":"amy@only_for_json_udf_test.net", "owner":"Tony" } 

    提取owner字段信息,返回Tony。

    select get_json_object(jsonString, '$.owner'); 

    提取store.fruit字段第一个数组信息,返回{"weight":8,"type":"apple"}。

    select get_json_object(jsonString, '$.store.fruit[0]'); 

    提取不存在的字段信息,返回NULL。

    select get_json_object(jsonString, '$.non_exist_key');
  • 提取数组型JSON对象的信息。命令示例如下。

    返回22。

    select get_json_object('{"array":[["a",11],["b",22],["c",33]]}','$.array[1][1]'); 

    返回["h00","h11","h22"]。

    select get_json_object('{"a":"b","c":{"d":"e","f":"g","h":["h00","h11","h22"]},"i":"j"}','$.c.h[*]'); 

    返回["h00","h11","h22"]。

    select get_json_object('{"a":"b","c":{"d":"e","f":"g","h":["h00","h11","h22"]},"i":"j"}','$.c.h'); 

    返回h11。

    select get_json_object('{"a":"b","c":{"d":"e","f":"g","h":["h00","h11","h22"]},"i":"j"}','$.c.h[1]');
  • 提取带有.的JSON对象中的信息。命令示例如下。

    创建一张表。

    create table json_table (id string, json string); 

    向表中插入数据,Key带 "."

    insert into table json_table (id, json) values ("1", "{\"city1\":{\"region\":{\"rid\":6}}}"); 

    向表中插入数据,Key不带 "."

    insert into table json_table (id, json) values ("2", "{\"city1\":{\"region\":{\"rid\":7}}}"); 

    取rid的值,查询key为city1,返回6。由于包含.,只能用['']来解析。

    select get_json_object(json, "$['city1'].region['id']") from json_table where id =1; 

    取rid的值,查询key为city1,返回7。查询方法有如下两种。

    select get_json_object(json, "$['city1'].region['id']") from json_table where id =2; 
    select get_json_object(json, "$.city1.region['id']") from json_table where id =2;
  • JSON输入为空或非法格式。命令示例如下。

    返回NULL。

    select get_json_object('','$.array[2]'); 

    返回NULL。

    select get_json_object('"array":["a",1],"b":["c",3]','$.array[1][1]');
  • JSON字符串涉及转义。命令示例如下。

    返回"3"。

    select get_json_object('{"a":"\\"3\\"","b":"6"}', '$.a');  

    返回'3'。

    select get_json_object('{"a":"\'3\'","b":"6"}', '$.a'); 
  • 一个JSON对象中可以出现相同的Key,可以成功解析。

    返回1。

    select get_json_object('{"b":"1","b":"2"}', '$.b');
  • 输出结果按照JSON字符串的原始排序方式输出。

    返回{"b":"3","a":"4"}。

    select get_json_object('{"b":"3","a":"4"}', '$');
support.huaweicloud.com/sqlreference-dli/dli_spark_get_json_object.html