如何在 BigQuery 中解析 JSON 密钥对值?

Posted

技术标签:

【中文标题】如何在 BigQuery 中解析 JSON 密钥对值?【英文标题】:How do I parse JSON key pair values in BigQuery? 【发布时间】:2021-05-07 15:49:32 【问题描述】:

我有一个像这样的 JSON

 "promo_codes": 
        "AKNC": "",
        "AZQE": "",
        "BBVY": "xbKn2vA8Z2XoDSxawDIzFrzqSEf1",
        "BJCR": "ou9Y3zXzGXU5loe2CjMGEDwCUln2"
    

在 Bigquery 中,我想将这些存储在一个类型为 REPEATED 的表中,例如 promo_codes.key 和 promo_codes.value 字段。

结果表应该是包含代码列表的单行(这个 JSON 是单行的,还有很多其他的需要用不同的代码解析)。

我该如何完成?

下面几乎是我想要的,但它没有将正确的用户与代码配对。

 ARRAY(
    SELECT AS STRUCT 
    REGEXP_EXTRACT_ALL(JSON_EXTRACT(C.data, '$.promo_codes'), r'"([a-zA-Z0-9\.]+)":') as code,
    REGEXP_EXTRACT_ALL(JSON_EXTRACT(C.data, '$.promo_codes'), r':"([a-zA-Z0-9\.]+)"') as user_id

) 作为促销代码,

【问题讨论】:

【参考方案1】:

使用下面的方法

select 
  array(
    select as struct 
      split(kv, ':')[offset(0)] as code, 
      split(kv, ':')[offset(1)] as user_id 
    from unnest(split(translate(json_extract(c.data, '$.promo_codes'), '"', ''))) kv
  ) as promo_codes
from `project.dataset.table` c    

如果应用于您问题中的样本数据 - 输出是

【讨论】:

以上是关于如何在 BigQuery 中解析 JSON 密钥对值?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 JSON 数组中的值解析为 BigQuery 中的列

如何解析来自 Bigquery 结果的 json 响应?

在 BigQuery 中加载 JSON / JSON 在从位置开始的行中解析错误 ...:解析器在字符串结束之前终止

如何在没有密钥的情况下解析 JSON 文件?

使用 Java 从 BigQuery 到 BigQuery 表的表复制中的 JSON 解析错误

从 BigQuery 中具有无效令牌的列中解析 JSON 文件