You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google BigQuery中如何根据指定ID可靠提取JSON对象的值?

BigQuery提取JSON数组中指定id的value值

方法1:使用JSONPath过滤(推荐,简洁高效)

BigQuery支持标准JSONPath语法,可直接在JSON_EXTRACT_SCALAR中通过过滤条件定位目标对象,完全不依赖数组内的位置:

SELECT
  JSON_EXTRACT_SCALAR(
    JSON_,
    '$[?(@.id == "B")].value'
  ) AS b_value
FROM (
  SELECT JSON '[
    {"id":"A","value":"1"},
    {"id":"B","value":"2"},
    {"id":"C","value":"John"},
    {"id":"D","value":null},
    {"id":"E","value":"random"}
  ]' AS JSON_
)

说明:$[?(@.id == "B")]会匹配数组中所有id等于"B"的对象,.value提取其对应值;JSON_EXTRACT_SCALAR直接返回字符串类型结果(若目标值为null则返回null)。

方法2:UNNEST展开数组后过滤

如果需要处理更复杂逻辑(比如存在多个匹配项、需额外计算),可先将JSON数组展开为行,再过滤提取:

SELECT
  MAX(IF(obj.id = "B", obj.value, NULL)) AS b_value
FROM (
  SELECT JSON '[
    {"id":"A","value":"1"},
    {"id":"B","value":"2"},
    {"id":"C","value":"John"},
    {"id":"D","value":null},
    {"id":"E","value":"random"}
  ]' AS JSON_
),
UNNEST(JSON_EXTRACT_ARRAY(JSON_)) AS json_obj,
UNNEST([STRUCT(
  JSON_EXTRACT_SCALAR(json_obj, '$.id') AS id,
  JSON_EXTRACT_SCALAR(json_obj, '$.value') AS value
)]) AS obj

说明:先用JSON_EXTRACT_ARRAY将JSON数组转为BigQuery数组,再通过UNNEST展开为每行一个对象,最后用IF和聚合函数(如MAX)提取目标值。若数组中有多个id为"B"的对象,MAX会返回其中一个;若需保留所有匹配结果,可去掉聚合逻辑。


内容的提问来源于stack exchange,提问作者Sebastian ten Berge

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 12:22:40