jsonExtract

语法

jsonExtract(json, location, type)

参数

json LITERAL 类型标量或向量,表示符合标准 JSON 字符串。

location 标量/向量/元组。每个元素可以是字符串或非零整数,用于指定相应维度的位置。

  • 如果为字符串,表示查询指定键对应的元素。

  • 如果为整数:表示查询该整数对应位置的元素。正整数表示从头开始查询,负整数表示从尾部开始查询。

type 字符串标量,表示返回结果的类型,可选值为 "long", "int", "double", "string" 。

详情

查询 JSON 对象中指定位置的数据,并按指定类型输出结果。

返回值:

  • 当参数 json 为标量时,返回标量结果;为向量时,返回向量结果。

  • 返回值类型由参数 type 指定。

  • 如果参数 location 指定的元素不存在,或无法解析为指定的类型,则返回空值 。

例子

例1 基础用法

A = '{"a": "hello", "b": [-100, 200.5, 300], "c": { "b" : 2} }'
jsonExtract(A, [2, 1], "int") 
// output: -100

jsonExtract(A, 1, "int") 
// output: NULL

jsonExtract(A, 999, "int") 
// output: NULL

jsonExtract(A, ["b", 2], "int") 
// output: 200

jsonExtract(A, ["c", "b"], "double") 
// output: 2

B = '{"a": "hello", "b": [200, 300]}'
jsonExtract([A, B], ["c", "b"], "int") 
// output: [2, NULL]

jsonExtract([A, B], [2, -1], "int") 
// output: [300, 300]

例2 查询表中 JSON 字符串里指定位置的数据。

A1 = '{"a": "a1","c": { "b" : 2} }'
A2 = '{"a": "a2", "c": { "b" : 3} }'
B1 = '{"a": "b1",  "c": { "b" : 3} }'
B2 = '{"a": "b2", "c": { "b" : 4} }'
t1 = table([A1, A2] as json, [2,3] as val)
t2 = table([B1, B2] as json, [3,4] as val)

select
    jsonExtract(t1.json, "a", "string") as json1, 
    jsonExtract(t2.json, "a", "string") as json2 
from t1 
join t2 on t1.val = t2.val
json1 json2
a2 b1