【问题标题】:Check if JSON key exist in BigQuery检查 BigQuery 中是否存在 JSON 键
【发布时间】:2021-06-27 09:57:33
【问题描述】:

我正在尝试检查密钥是否存在于 JSON 中,如果存在则返回整个 JSON。

我有一个 JSON 如下:

json    
 -------- 
 "fruit":[{"apples":"5","oranges":"10"},{"apples":"5","oranges":"4"}] 
 "fruit":{"apples":"1","oranges":"15"}   
 "fruit":{"apples":"5","oranges":"1"}  
 "fruit":[{"lettuce":"7","kale": "8"}] 

输出:如果 JSON ARRAY 或 JSON 对象有 key apples 则返回 key 的值

json                                                                    |Output 
 -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- -------- --------
 "fruit":[{"apples":"5","oranges":"10"},{"apples":"5","oranges":"4"}]  |[{"apples":"5","oranges":"10"},{"apples":"5","oranges":"4"}]
 "fruit":{"apples":"1","oranges":"15"}                                 |{"apples":"1","oranges":"15"}
 "fruit":{"apples":"5","oranges":"1"}                                  |{"apples":"5","oranges":"1"}
 "fruit":[{"lettuce":"7","kale": "8"}]                                 | null

【问题讨论】:

    标签: json google-cloud-platform google-bigquery


    【解决方案1】:

    考虑下面的例子

    with `project.dataset.table` as (
      select '{"fruit":[{"apples":"5","oranges":"10"},{"apples":"5","oranges":"4"}]}' as json union all
      select '{"fruit":{"apples":"1","oranges":"15"}}' union all
      select '{"fruit":{"apples":"5","oranges":"1"}}' union all
      select '{"fruit":{"pineapples":"5","oranges":"1"}}' union all
      select '{"fruit":[{"lettuce":"7","kale": "8"}]}' 
    )
    select json, if(regexp_contains(json, '"apples"'), json_extract(json, '$.fruit'), null) as output 
    from `project.dataset.table`         
    

    有输出

    【讨论】:

    • 嗨,米哈伊尔,我又添加了一个问题。你能帮我吗:) link
    • 当然。回答!
    【解决方案2】:

    只需使用if:

    with mytable as (
      select '{"fruit":[{"apples":"5","oranges":"10"},{"apples":"5","oranges":"4"}]}' as json union all
      select '{"fruit":{"apples":"1","oranges":"15"}}' union all
      select '{"fruit":{"apples":"5","oranges":"1"}}' union all
      select '{"fruit":[{"lettuce":"7","kale": "8"}]}' 
    )
    select if(json like '%apples%', json_extract(json, '$.fruit'), null) as output 
    from mytable
    

    【讨论】:

      猜你喜欢
      • 2022-07-12
      • 2017-08-09
      • 2014-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-28
      • 1970-01-01
      相关资源
      最近更新 更多