#json #postgresql
#json #postgresql
Вопрос:
Я довольно новичок в своем опыте работы с Postgres, поэтому я надеюсь, что это не слишком исправимо 🙂
Если вложенный JSON передается как переменная в PostgreSQL, можно ли его проанализировать без предварительного сброса во временную таблицу?
Допустим, я хотел получить имена материнской платы из примера ниже. Как будет выглядеть оператор SELECT?
do
$$
declare persons json =
'{
"name":"Sally",
"spouse":
{
"name":"Alex",
"parents":
{
"father":"Rafael",
"mother":"Ofelia"
},
"phones":
[
{
"type":"work",
"number":"619-555-1212"
},
{
"type":"cell",
"number":"012-345-6789"
}
]
}
}';
begin
/* ??? */
end;
$$
Заранее большое спасибо,
Мэтт
Ответ №1:
Его можно разобрать, но вопрос в том, что вы будете делать с ответом?
Если вы просто хотите увидеть его в результатах, то быстрее всего определить свой json в CTE:
with p as (
select '{
"name":"Sally",
"spouse":
{
"name":"Alex",
"parents":
{
"father":"Rafael",
"mother":"Ofelia"
},
"phones":
[
{
"type":"work",
"number":"619-555-1212"
},
{
"type":"cell",
"number":"012-345-6789"
}
]
}
}'::jsonb as persons
)
select persons->'spouse'->'parents'->>'mother'
from p;
?column?
----------
Ofelia
(1 row)
Комментарии:
1. Эй, Майк, CTS — это именно то, что мне было нужно! Я собираюсь завершить вставку проанализированного JSON в таблицу. Ранее мы помещали JSON во временную таблицу, а затем обрабатывали ее, но я слышал, что временная таблица не нужна. Я просто пытался понять, как управлять синтаксическим анализом JSON без таблицы, на которую можно опереться, что, конечно, CTE отлично справляется. Спасибо миллион!
2. В качестве альтернативы,
select persons#>>'{spouse,parents,mother}' from p;