JSON_EXTRACT 不适用于 BigQuery 中的布尔值
Posted
技术标签:
【中文标题】JSON_EXTRACT 不适用于 BigQuery 中的布尔值【英文标题】:JSON_EXTRACT not working with booleans in BigQuery 【发布时间】:2021-02-10 22:45:20 【问题描述】:我有一个来自 Firebase 的 JSON,如下所示:
'name' : 'starbyone',
'foo': 'id': 123,
'somebit': True,
'bar': '_a': 123, '_b': 456
我正在使用 BigQuery 并且很想通过使用 JSON_EXTRACT
function 来提取“foo”:
SELECT
JSON_EXTRACT(json, "$.name") as Works,
JSON_EXTRACT(json, "$.foo") as AlsoWorks,
JSON_EXTRACT(json, "$.bar") as DoesNotWork
FROM schema.table
但问题是第三列(别名为 DoesNotWork)只返回 NULL,而 'Foo' 将返回字符串“'id': 123”
我也尝试过 JSON_VALUE ,但无济于事。
我做错了什么?
这个简单的 sn-p 似乎也不适合我:
SELECT JSON_EXTRACT("'category': 1, 'comments': [], 'free': False,'price': 55","$.price") AS Result
【问题讨论】:
你在foo
之前缺少逗号 - 而不是这个 - 对我有用 - 输出是 [ "Works": "\"starbyone\"", "AlsoWorks": "\" id\":123", "DoesNotWork": "\"_a\":123,\"_b\":456" ]
@MikhailBerlyant 这是一个错字,我编辑了它。您在使用 BigQuery 编辑器吗?
使用 BQ 控制台 - console.cloud.google.com/bigquery
@MikhailBerlyant ` SELECT JSON_EXTRACT("'category': 1, 'cmets': [], 'free': False,'price': 55","$.price") AS 结果` 这个 sn-p 返回 NULL 吗?它在控制台中为我这样做。如果我将其更改为类别,它就可以正常工作,在这种情况下,预期的结果 (1) 会显示在控制台中。
将 False
更改为 false
或 'False'
- 取决于此属性代表什么 - 布尔值或字符串
【参考方案1】:
使用true
和false
代替True
或False
【讨论】:
就是这样!非常感谢。未将其包含在原始数据中是我的错误,但我想它确实有助于最终解决问题。然而,原始 JSON 文件直接来自 Firebase,并且在该数据中大写。 您可以使用 regexp_replace 即时修复此问题。发布新问题-您在进行这项工作时会遇到问题:o) 我刚刚意识到使用简单的 REPLACE 是行不通的,因为它会在其他可能不需要的字段中改变它。我在想也许最好尝试确保它从 Firebase“正确”导出,但我的开发人员说这是原始格式,所以也许谷歌的人应该纠正一下 当然。只是更换不会!这就是为什么我提到 regexp_replace 作为提示给你的原因 :o) 显然你也可以在 firebase 方面尝试一些东西 是的,我想稍后我将不得不发布另一个问题。再次感谢以上是关于JSON_EXTRACT 不适用于 BigQuery 中的布尔值的主要内容,如果未能解决你的问题,请参考以下文章
在 sqlite 中使用 json_extract 从父对象和子对象中提取数据
BigQuery 中 JSON_EXTRACT 和 JSON_QUERY 的区别
BigQuery 标准 SQL 中的 JSON_EXTRACT?