Извлечь вложенный вложенный массив JSON в Presto - PullRequest
0 голосов
/ 02 октября 2018

Скажем, у меня есть объект JSON, который выглядит следующим образом:

{"attributes":{"blah":"bleh","transactionlist":[{"ids":["a","b","c","d"]}]}}

Я попытался извлечь идентификаторы (a, b, c, d) в строки в Presto.Судя по другим ресурсам, мне кажется, что я должен привести элемент "ids" к карте, а затем к массиву, и в конце концов удалить его.Однако у меня возникли некоторые проблемы, поскольку элемент «ids» вложен во вложенный элемент.У кого-нибудь есть советы?

Спасибо!

1 Ответ

0 голосов
/ 02 октября 2018

Поскольку элемент ids в массиве JSON вложен в другой массив JSON, необходимо дважды ввести UNNEST:

presto> SELECT id
     -> FROM (VALUES (JSON '{"attributes":{"blah":"bleh","transactionlist":[{"ids":["a","b","c","d"]}]}}')) t(x)
     -> CROSS JOIN UNNEST (CAST(json_extract(x, '$.attributes.transactionlist') AS ARRAY<JSON>)) u(transaction)
     -> CROSS JOIN UNNEST (CAST(json_extract(transaction, '$.ids') AS ARRAY<varchar>)) z(id)
     -> ;
 id
----
 a
 b
 c
 d
(4 rows)
...