我试图从json数组中获取某个属性的所有值.考虑到以下json,我试图获得所有类型,例如iPhone,家庭
{
"firstName": "John",
"lastName" : "doe",
"age" : 26,
"address" :
{
"streetAddress": "naist street",
"city" : "Nara",
"postalCode" : "630-0192"
},
"phoneNumbers":
[
{
"type" : "iPhone",
"number": "0123-4567-8888"
},
{
"type" : "home",
"number": "0123-4567-8910"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我正在使用$.phoneNumbers[*].type它似乎在在线解析器上正常工作,
但当我在大查询中使用它时:
select json_extract(my_column,'$.phoneNumbers[*].type')
from my_table
Run Code Online (Sandbox Code Playgroud)
我明白了:
JSONPath parse error at: [*].type
Run Code Online (Sandbox Code Playgroud)
您可以编写Javascript UDF来进行提取:
SELECT JSON_EXTRACT('[1,2,3]', '$[*]') parsed
Error: Unsupported operator in JSONPath: *
Run Code Online (Sandbox Code Playgroud)
UDF替代方案:
#standardSQL
CREATE TEMPORARY FUNCTION parseJson(libs STRING)
RETURNS ARRAY<INT64>
LANGUAGE js AS """
try {
return JSON.parse(libs);
} catch (e) {
return [];
}
""";
SELECT parseJson('[1,2,3]') parsed
Run Code Online (Sandbox Code Playgroud)
更复杂的例子:
#standardSQL
CREATE TEMPORARY FUNCTION parseJson(libs STRING)
RETURNS ARRAY<STRUCT<x INT64, y INT64, z INT64>>
LANGUAGE js AS """
try {
return JSON.parse(libs);
} catch (e) {
return [];
}
""";
SELECT parseJson(JSON_EXTRACT('{"a":[{"x":1},{"y":2},{"z":3}]}', '$.a')) parsed
Run Code Online (Sandbox Code Playgroud)
(灵感来自:https://discuss.httparchive.org/t/javascript-library-detection/955)
| 归档时间: |
|
| 查看次数: |
3292 次 |
| 最近记录: |