Я пытаюсь извлечь значения из объектов JSON, представленных в таблице BigQuery. Постановка проблемы. У меня есть таблица со значениями json в одном из столбцов. Я хочу извлечь значения из json, когда значение ключа - это массив, а массив имеет совпадающие значения. Вывод должен быть в ARRAY согласно условию, указанному в запросе, написанном ниже, и когда есть объект, он должен возвращать значение в STRING. Пожалуйста, обратитесь к выходной таблице и запросу ниже. У меня есть таблица, как показано ниже
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, ( ВЫБРАТЬ МАССИВ (JSON_EXTRACT_SCALAR (фрукт; '$ .oranges')) ИЗ НЕСТАНДАРТ (ifnull (json_extract_array (json, '$ .fruit'), [json_EXTRACT (json, '$ .fruit')])) фрукты ГДЕ JSON_EXTRACT_SCALAR (фрукты; '$ .apples') = "5") AS fruit_value ИЗ ТАБЛИЦА
Выдает ошибку типа Array cannot have a null element; error in writing field fruit_value
Я хочу вывод, как показано ниже
| json. | fruit_value|
| -------- | -------- |
| "fruit":[{"apples":"5","oranges":"10"},{"apples":"5","oranges":"4"}]| [10,4]|
| "fruit":{"apples":"1","oranges":"15"}| null|
| "fruit":{"apples":"5","oranges":"1"}| 1 |
| "fruit":[{"lettuce":"7","kale": "8"}]| null|

Рассмотрим ниже
#standardSQL
select json,
array(
select json_extract_scalar(x, '$.oranges') oranges,
from unnest(ifnull(json_extract_array(json, '$.fruit'),
[json_extract(json, '$.fruit')])) x
where json_extract_scalar(x, '$.apples') = '5'
) as fruit_value
from `project.dataset.table`
если применимо к образцу данных в вашем вопросе
with `project.dataset.table` as (
select '{"fruit":[{"apples":"5","oranges":"10"},{"apples":"5","oranges":"4"}]}' 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"}]}'
)
выход