【问题标题】:Unnesting stringified JSON with two sets of double quotes使用两组双引号取消嵌套字符串化 JSON
【发布时间】:2021-11-13 16:09:07
【问题描述】:

我有一个 python 脚本,它轮询 API 并将响应存储在 BQ 表中,该表具有如下所示的分层字符串化 JSON 字段:

"{""inputs"": {""Layer1"": {""Layer2"": {""Layer3"": {""item1"": 0.7, ""item2"": 10.0, ""item3"": 0.14}}}}"

我创建了以下查询以取消嵌套:

  ro.id,
  json_extract_scalar(s,
    '$.item1') AS item1,
  json_extract_scalar(s,
    '$.item2') AS item2,
  json_extract_scalar(s,
    '$.item3') AS item3
FROM
  `project.dataset.table` ro
LEFT JOIN
  UNNEST(json_extract_array(response)) AS r
LEFT JOIN
  UNNEST (json_extract_array("Layer1")) AS o
LEFT JOIN
  UNNEST (json_extract_array("Layer2")) AS sc
LEFT JOIN
  UNNEST (json_extract_array("Layer3")) AS s

查询按预期运行并构建表,但未嵌套字段中的所有数据均为空。

我无法控制脚本如何存储数据,所以我只能利用 SQL 来解决这个问题。这两组双引号是我的主要问题吗?如果是这样,解决这个问题的最佳方法是什么?

【问题讨论】:

    标签: json google-bigquery


    【解决方案1】:

    考虑以下方法

    SELECT 
      json_extract_scalar(items,'$.item1') AS item1,
      json_extract_scalar(items,'$.item2') AS item2,
      json_extract_scalar(items,'$.item3') AS item3,
    FROM `project.dataset.table` ro,
    UNNEST([struct(json_extract(response, '$.inputs.Layer1.Layer2.Layer3') as items)])             
    

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

    【讨论】:

    • 美丽。转换为 struct 是我缺少的部分,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    相关资源
    最近更新 更多