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_EXTRACTfunction 来提取“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】:

使用truefalse 代替TrueFalse

【讨论】:

就是这样!非常感谢。未将其包含在原始数据中是我的错误,但我想它确实有助于最终解决问题。然而,原始 JSON 文件直接来自 Firebase,并且在该数据中大写。 您可以使用 regexp_replace 即时修复此问题。发布新问题-您在进行这项工作时会遇到问题:o) 我刚刚意识到使用简单的 REPLACE 是行不通的,因为它会在其他可能不需要的字段中改变它。我在想也许最好尝试确保它从 Firebase“正确”导出,但我的开发人员说这是原始格式,所以也许谷歌的人应该纠正一下 当然。只是更换不会!这就是为什么我提到 regexp_replace 作为提示给你的原因 :o) 显然你也可以在 firebase 方面尝试一些东西 是的,我想稍后我将不得不发布另一个问题。再次感谢

以上是关于JSON_EXTRACT 不适用于 BigQuery 中的布尔值的主要内容,如果未能解决你的问题,请参考以下文章

在 sqlite 中使用 json_extract 从父对象和子对象中提取数据

MySQL LIKE 与 json_extract

BigQuery 中 JSON_EXTRACT 和 JSON_QUERY 的区别

BigQuery 标准 SQL 中的 JSON_EXTRACT?

为啥 json_extract 有效,但 json_extract_scalar 无效?

mysql中json_extract函数的使用?作用是什么?