使用两组双引号取消嵌套字符串化 JSON
Posted
技术标签:
【中文标题】使用两组双引号取消嵌套字符串化 JSON【英文标题】:Unnesting stringified JSON with two sets of double quotes 【发布时间】: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 来解决这个问题。这两组双引号是我的主要问题吗?如果是这样,解决这个问题的最佳方法是什么?
【问题讨论】:
【参考方案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 是我缺少的部分,谢谢!以上是关于使用两组双引号取消嵌套字符串化 JSON的主要内容,如果未能解决你的问题,请参考以下文章
取消嵌套存储在列中的 JSON 字符串 [BigQuery]