BigQuery 在 JSON 对象的 JSON 数组中提取一个属性

问题描述 投票:0回答:1

我想修改以下查询以从 JSON 数组中的对象中提取 value 属性并输出如下表:

“值1”,“值2”

但是我的查询当前输出数组中每个条目的整个 JSON 对象。

我想这样做,以便我可以将其用作 IN 表达式的子查询。

SELECT valueJson
FROM (
  (
    SELECT JSON_EXTRACT_ARRAY(values) AS valueJson
    FROM (
      SELECT JSON_QUERY(tag, '$.values') AS values
      FROM UNNEST(JSON_EXTRACT_ARRAY(
        JSON 
'[{"active":true,"key":"key1",
"values":[{"active":true,"value":"value1"}]},
{"active":true,"key":"key2",
"values":[{"active":true,"value":"value2"}]}]')) AS tag
    )
  )
)

谢谢!

sql json google-bigquery
1个回答
0
投票

我想出了这个,但很高兴接受另一个带有解释或改进的答案:

SELECT
  JSON_EXTRACT_SCALAR(valueJson, '$.value') AS value
FROM (
  SELECT valueJson
  FROM (
    SELECT JSON_QUERY(tag, '$.values') AS valuesArray
    FROM UNNEST(JSON_EXTRACT_ARRAY( 
      JSON '[{"active":true,"key":"key1","values":[{"active":true,"value":"values1"}]},{"active":true,"key":"key2","values":[{"active":true,"value":"value2"},{"active":true,"value":"value3"}]}]' )) AS tag )
 JOIN UNNEST(JSON_EXTRACT_ARRAY(valuesArray)) AS valueJson )
WHERE JSON_EXTRACT_SCALAR(valueJson, '$.value') IS NOT NULL 
© www.soinside.com 2019 - 2024. All rights reserved.