BigQuery извлекает один атрибут из массива объектов JSON JSON

Я хочу изменить следующий запрос, чтобы извлечь атрибут значения из объектов в массиве JSON и вывести таблицу следующим образом:

«значение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
    )
  )
)

Спасибо!

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
0
62
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я придумал это, но рад принять другой ответ с объяснениями или улучшениями:

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 
Ответ принят как подходящий

Рассмотрим нижеприведенный подход. Он чистый и тонкий, поэтому говорит сам за себя.

with your_data as (
  select JSON '[{"active":true,"key":"key1","values":[{"active":true,"value":"values1"}]},{"active":true,"key":"key2","values":[{"active":true,"value":"value2"},{"active":true,"value":"value3"}]}]' json
)
select val.value
from your_data, 
unnest(json_extract_array(json)) el,
unnest(json_extract_array(el.values)) val   

с выходом

Спасибо, я вижу, что могу просматривать структуру JSON понятным и простым способом с помощью нескольких выражений, разделенных запятыми, в FROM. Я ценю помощь

Matt 06.05.2024 16:10

Другие вопросы по теме