I have two JSON rows in a PostgreSQL 9.4 table:
the_column
----------------------
{"evens": [2, 4, 6]}
{"odds": [1, 3, 5]}
I want to combine all of the rows into one JSON object. (It should work for any number of rows.)
Desired output:
{"evens": [2, 4, 6], "odds": [1, 3, 5]}
Use json_agg()
to get an array:
SELECT json_agg(source_column) AS the_column
FROM tbl;
Or json_each()
in a LATERAL
join and json_object_agg()
to assemble elements:
SELECT json_object_agg(key, value) AS the_column
FROM tbl, json_each(data);
FYI, if someone's using jsonb in >= 9.5 and they only care about top-level elements being merged without duplicate keys, then it's as easy as using the || operator:
select '{"evens": [2, 4, 6]}'::jsonb || '{"odds": [1, 3, 5]}'::jsonb;
?column?
-----------------------------------------
{"odds": [1, 3, 5], "evens": [2, 4, 6]}
(1 row)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With