Используйте JSON_ARRAY_ELEMENTS_TEXT
, чтобы расширить его до набора значений TEXT, затем STRING_AGG
их.
SELECT STRING_AGG(j, ',')
FROM JSON_ARRAY_ELEMENTS_TEXT('{"key": ["a", "b"]}'::JSON->'key') AS j
Бит с TRIM
, который вы разместили в своем вопросе, требовался в 9.3 и ниже.потому что JSON_ARRAY_ELEMENTS_TEXT
не было доступно в этих версиях.
Если вы хотите решение с одной функцией, вы всегда можете заключить вышеуказанный запрос в функцию:
CREATE OR REPLACE FUNCTION json_array_to_text(json_array JSON)
RETURNS TEXT AS
$BODY$
SELECT STRING_AGG(j, ',')
FROM JSON_ARRAY_ELEMENTS_TEXT(json_array) AS j;
$BODY$
LANGUAGE SQL IMMUTABLE;
Затем вы просто вызываетефункция с массивом: SELECT json_array_to_text('{"key": ["a", "b"]}'::JSON->'key')
и получить: a,b