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

如何在BigQuery中将JSON结构体转换为行数据?

在BigQuery中展开JSON键值对汇率表的方法

可以直接通过BigQuery SQL实现需求,以下是两种高效的解决方案:

方法一:利用JSON_OBJECT_KEYS提取键并匹配值

这是最直接的方式,无需修改JSON结构,通过内置函数直接解析键值对:

SELECT
  Date_field,
  currency_code,
  SAFE_CAST(JSON_VALUE(JSON_field, CONCAT('$.', currency_code)) AS FLOAT64) AS exchange_rate
FROM
  `你的项目ID.你的数据集ID.你的表名`,
  UNNEST(JSON_OBJECT_KEYS(JSON_field)) AS currency_code

说明:

  • JSON_OBJECT_KEYS(JSON_field):提取JSON对象中所有的币种代码(如AED、AFN),返回一个数组
  • UNNEST(...):将数组拆分成单行数据,每个币种代码对应一行
  • JSON_VALUE(JSON_field, CONCAT('$.', currency_code)):通过动态拼接的JSON路径,获取对应币种的汇率值
  • SAFE_CAST(...) AS FLOAT64:安全转换为数值类型,避免因格式错误导致查询失败

方法二:将JSON对象转换为数组后展开

如果需要更结构化的数组形式,可以先将JSON对象转换为数组格式再解析:

SELECT
  Date_field,
  JSON_VALUE(item, '$.code') AS currency_code,
  SAFE_CAST(JSON_VALUE(item, '$.rate') AS FLOAT64) AS exchange_rate
FROM
  `你的项目ID.你的数据集ID.你的表名`,
  UNNEST(
    JSON_EXTRACT_ARRAY(
      REGEXP_REPLACE(
        JSON_field,
        r'"([^"]+)":([^,}]+)',
        '{"code":"$1","rate":$2}'
      )
      -- 将对象的大括号替换为数组的中括号
      |> REPLACE('{', '[')
      |> REPLACE('}', ']')
    )
  ) AS item

说明:

  • REGEXP_REPLACE:将原JSON的键值对(如"AED":3.6725)转换为结构化对象{"code":"AED","rate":3.6725}
  • REPLACE:将外层的{}替换为[],把JSON对象转为JSON数组
  • JSON_EXTRACT_ARRAY:解析转换后的数组,再通过UNNEST拆分每行数据

两种方法都能实现将JSON字段展开为每行对应一个币种和汇率的结构,推荐使用方法一,性能更优且逻辑更简洁。

内容的提问来源于stack exchange,提问作者Danila Blagov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 03:33:17