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

如何在BigQuery中提取JSON对象唯一键值对并展开regularHours数组

在BigQuery中展开JSON对象内唯一键对应的数组

因为你的每条记录里$.menus下只有一个唯一键,我们可以通过以下步骤提取并展开对应的regularHours数组:

方法一:简洁写法

直接嵌套函数完成提取与展开:

SELECT
  hour.*
FROM MyDataSet.UberEats,
UNNEST(
  JSON_QUERY_ARRAY(
    JSON_QUERY(JSON_EXTRACT(response.data, '$.menus'), '$[0]'),
    '$.regularHours'
  )
) AS hour

方法二:分步解析(更易读)

用CTE分步处理,便于理解每一步的结果:

WITH menu_objects AS (
  SELECT
    -- 将menus下的唯一键对象提取出来
    JSON_QUERY(JSON_EXTRACT(response.data, '$.menus'), '$[0]') AS single_menu
  FROM MyDataSet.UberEats
)
SELECT
  -- 展开regularHours数组为多行
  hour.*
FROM menu_objects,
UNNEST(JSON_QUERY_ARRAY(single_menu, '$.regularHours')) AS hour

关键函数说明

  • JSON_EXTRACT(response.data, '$.menus'):获取包含唯一键的整个menus对象
  • JSON_QUERY(..., '$[0]'):将menus对象转换为数组后取第一个元素(即唯一键对应的完整对象)
  • JSON_QUERY_ARRAY(..., '$.regularHours'):从目标对象中提取regularHours数组
  • UNNEST:把数组展开成独立的行记录

如果需要保留原表的其他字段,只需在SELECT中添加原表字段即可:

SELECT
  original.*,
  hour.*
FROM MyDataSet.UberEats original,
UNNEST(
  JSON_QUERY_ARRAY(
    JSON_QUERY(JSON_EXTRACT(original.response.data, '$.menus'), '$[0]'),
    '$.regularHours'
  )
) AS hour

内容的提问来源于stack exchange,提问作者Subadarshini Madhanan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 14:00:01