Я использую PostgreSQL 9.4.5, 64-битный на Windows. У меня есть несколько массивов неправильного размера. Я хочу использовать json_array_elements
, чтобы развернуть массивы, подобные следующему коду
with outside as (select (json_array_elements('[[],[11],[21,22,23]]'::json)) aa, json_array_elements('[1,2,3]'::json)bb)
select json_array_elements_text(aa), bb from outside
Тем не менее, когда я запускаю это, я получаю
aa | bb
-------
11 | 2
21 | 3
22 | 3
23 | 3
Пустой массив в столбце aa сбрасывается на пол вместе со значением 1 в столбце bb
Я хотел бы получить
aa | bb
----------
null | 1
11 | 2
21 | 3
22 | 3
23 | 3
Кроме того, это ошибка в PostgreSQL?
2 ответа
Работая над собственной проблемой, у меня есть один возможный ответ, но это похоже на беспорядок
With initial as (select '[[],[11],[21,22,23]]'::json as a, '[1,2,3]'::json as b),
Q1 as (select json_array_elements(a) as aa, json_array_elements(b) bb from initial),
Q2 as (select ARRAY[aa->>0, aa->>1, aa->>2] as aaa, bb as bbb, ARRAY[0,1,2] as ccc from q1),
-- where the indicices are computed in a separate query by looping from 0 to json_array_length(...)
Q3 as (select unnest(aaa) as aaaa, bbb as bbbb, unnest(ccc) as cccc from q2)
Select aaaa, bbbb from q3 where aaaa is not null or cccc = 0
Это не ошибка. json_array_elements_text('[null]')
возвращает null
, json_array_elements_text('[]')
ничего не возвращает.
with outside as (
select (
json_array_elements('[[],[11],[21,22,23]]'::json)) aa,
json_array_elements('[1,2,3]'::json) bb
)
select elem as aa, bb
from outside,
json_array_elements_text(case when aa::text = '[]' then '[null]'::json else aa end) elem;
aa | bb
----+----
| 1
11 | 2
21 | 3
22 | 3
23 | 3
(5 rows)
Похожие вопросы
Связанные вопросы
Новые вопросы
json
JSON (объектная нотация JavaScript) - это сериализуемый формат обмена данными, предназначенный для машинного и человеческого чтения. Не используйте этот тег для собственных объектов JavaScript или литералов объектов JavaScript. Прежде чем задать вопрос, проверьте свой JSON с помощью валидатора JSON, такого как JSONLint (https://jsonlint.com).