从带有键名的 JSON 中提取值在 bigquery 中包含 #

Posted

技术标签:

【中文标题】从带有键名的 JSON 中提取值在 bigquery 中包含 #【英文标题】:Extract value from JSON with key name includes # in bigquery 【发布时间】:2018-04-03 19:57:04 【问题描述】:

我在 bigquery 中有一个名为 test 的表。它有一列称为attributes。 该值采用 JSON 格式,以“# of items”为键,例如:“# of items”:“100”

当我执行下面的查询时 SELECT JSON_EXTRACT(attributes, "$['# of items']") AS num_items FROM test

我遇到了以下错误: Error: JSONPath parse error at: ['# of items']

获取其价值的最简单方法是什么?

【问题讨论】:

【参考方案1】:

BigQuery Legacy SQL 失败

改用 BigQuery 标准 SQL 就可以了

#standardSQL
WITH `project.dataset.test` AS (
  SELECT '"# of items": "100"' AS attributes
)
SELECT JSON_EXTRACT(attributes, "$['# of items']") AS num_items
FROM `project.dataset.test`   

结果为

Row num_items    
1   "100"    

如果由于某种原因你被绑定到 BQ Legacy SQL - 使用下面的技巧

#legacySQL
SELECT JSON_EXTRACT(REPLACE(attributes, '"# of items"', "'number of items'"), "$['number of items']") AS num_items
FROM [project:dataset.test]

【讨论】:

当然。请考虑投票给答案 但是SELECT '"# of items": "100"' 部分是硬编码的。如果我想要键 # of items 的所有值怎么办?这不是我的情况,但我可以了解它 您是否介意将您的问题作为一个单独的问题发布 - 所以我们将能够回答它。 cmets 格式不允许这样做 顺便说一句。您在 WITH 语句中看到的任何内容都只是一个虚拟数据 - 您可以删除该部分并针对您的真实表实际运行该语句 我认为 WITH 块是强制性的。我终于明白了。谢谢

以上是关于从带有键名的 JSON 中提取值在 bigquery 中包含 #的主要内容,如果未能解决你的问题,请参考以下文章

如何解析具有动态键名的嵌套 json

在不知道键名的情况下访问 JSON 对象的元素

更改没有键名的json值

如何使用json方法解析android中没有键名的数组内的嵌套json编码数组?

如何从 BigQuery 中的 Array(Struct) 类型数据结构中获取每个键名的值

PHP json转换 无键名数据格式转换为有键名格式