Объедините два объекта JSON в PostgreSQL

Вопрос: У меня две строки JSON в таблице PostgreSQL 9.4: the_column ---------------------- {"evens": [2, 4, 6]} {"odds": [1, 3, 5]} Я хочу объединить все строки в один объект JSON. (Он должен работать для любого количества строк.) Желаемый результат: {"evens": [2, 4, 6], "odds": [1, 3, 5]} Лучший ответ: Используйте json_agg() для получения массива: SELECT json_agg(source_column)

Вопрос:

У меня две строки JSON в таблице PostgreSQL 9.4:

the_column ———————- {«evens»: [2, 4, 6]} {«odds»: [1, 3, 5]}

Я хочу объединить все строки в один объект JSON. (Он должен работать для любого количества строк.)

Желаемый результат:

{«evens»: [2, 4, 6], «odds»: [1, 3, 5]}

Лучший ответ:

Используйте json_agg() для получения массива:

SELECT json_agg(source_column) AS the_column FROM tbl;

Или json_each() в LATERAL присоединиться и json_object_agg(), чтобы собрать элементы:

SELECT json_object_agg(key, value) AS the_column FROM tbl, json_each(data); Ответ №1

FYI, если кто-то использует jsonb в> = 9.5, и им все равно, что элементы верхнего уровня сливаются без дубликатов ключей, тогда это так же просто, как использование || оператор:

select ‘{«evens»: [2, 4, 6]}’::jsonb || ‘{«odds»: [1, 3, 5]}’::jsonb; ?column? —————————————— {«odds»: [1, 3, 5], «evens»: [2, 4, 6]} (1 row)

Оцените статью
Добавить комментарий