У меня есть таблица со списком словарей. В примере в списке только один словарь.
Предметы |
---|
[{'a': 'яблоко', b: 'банан'}] |
Я хочу найти значение для «а», то есть яблоко.
Я пытался:
SELECT json_extract_scalar(json_parse(items), '$.a')
что дает ошибку:
Unexpected parameters (array(row("t" varchar,"i" varchar,"p" integer,"v" integer,"s" varchar))) for function json_parse. Expected: json_parse(varchar(x))
Я также пробовал:
SELECT TRANSFORM(CAST(JSON_PARSE(items) AS ARRAY<JSON>), x -> JSON_EXTRACT_SCALAR(x, '$.a'))
который дает ту же ошибку. Если я сначала сделаю CAST(items AS varchar)
, возникнет ошибка, в которой говорится, что он не может преобразовать массив в varchar.
Приведенная ошибка показывает, что ваши данные на самом деле не являются varchar или json, а представляют собой массив ROW
с 5 полями (t
, i
, p
, v
, s
). Строки не могут быть легко преобразованы в требуемую структуру json, но вы можете легко получить доступ к их полям по имени:
select item.t
from (
SELECT array [ cast (row('apple', 'banana') as row(t varchar, i varchar)) ] items -- shortened sample data
)
cross join unnest(items) as c(item) -- flatten the array
Выход:
яблоко |