Postgres 11,7. Обновление до PG 12 (JSONPath, я знаю) находится на стадии планирования, не знаю, когда мы туда доберемся.
Я работаю над передачей некоторых данных в сохраненную функцию PL / Pg SQL, и я изо всех сил пытаюсь распаковать массив, встроенный в объект. Я имею дело с некоторыми клиентскими библиотеками, которые действительно любят объект как JSON Root. {[]}
вместо []
.
В качестве отправной точки вот пример, который работает , когда я получаю массив как элемент верхнего уровня:
-- Note: jsonb instead of json may save reparsing time, if the results are reused.
-- Or so I think I heard.
with expanded_data AS (
select *
from jsonb_to_recordset(
'[
{"base_text":"Red Large Special","base_id":1},
{"base_text":"Blue Small","base_id":5},
{"base_text":"Green Medium Special","base_id":87}
]')
AS unpacked (base_text citext, base_id citext)
)
select base_text,
base_id
from expanded_data
Это возвращает ожидаемые результаты:
base_text base_id
Red Large Special 1
Blue Small 5
Green Medium Special 87
Этот вариант также отлично работает с массивом верхнего уровня
with expanded_data AS (
select *
from json_populate_recordset(
null::record,
'[
{"base_text":"Red Large Special","base_id":1},
{"base_text":"Blue Small","base_id":5},
{"base_text":"Green Medium Special","base_id":87}
]')
AS unpacked (base_text citext, base_id citext)
)
select base_text,
base_id
from expanded_data
Я не смог понять, как получить те же результаты, когда массив JSON встроен как элемент в объект JSON:
{"base_strings":[
{"base_text":"Red Large Special","base_id":1},
{"base_text":"Blue Small","base_id":5},
{"base_text":"Green Medium Special","base_id":87}
]}
Я работал с документами по синтаксису извлечения и различным доступным функциям. ..и еще не разобрались. Может ли кто-нибудь предложить разумную стратегию расширения встроенных элементов массива в набор строк?