【问题标题】:JSON_EXTRACT not working with booleans in BigQueryJSON_EXTRACT 不适用于 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' - 取决于此属性代表什么 - 布尔值或字符串

标签: sql json google-bigquery


【解决方案1】:

使用truefalse 代替TrueFalse

【讨论】:

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