sql >> Database >  >> RDS >> PostgreSQL

Return als array van JSON-objecten in SQL (Postgres)

json_build_object() in Postgres 9.4 of nieuwer

Of jsonb_build_object() om jsonb terug te geven .

SELECT value_two, json_agg(json_build_object('value_three', value_three
                                           , 'value_four' , value_four)) AS value_four
FROM   mytable 
GROUP  BY value_two;

De handleiding:

Bouwt een JSON-object uit een lijst met variadische argumenten. Volgens afspraak bestaat de lijst met argumenten uit afwisselende sleutels en waarden.

Voor elke versie (incl. Postgres 9.3)

row_to_json() met een ROW uitdrukking zou het lukken:

SELECT value_two
     , json_agg(row_to_json((value_three, value_four))) AS value_four
FROM   mytable
GROUP  BY value_two;

Maar je verliest originele kolomnamen. Een cast naar een geregistreerd rijtype voorkomt dat. (Het rijtype van een tijdelijke tabel dient ook voor ad-hocquery's.)

CREATE TYPE foo AS (value_three text, value_four text);  -- once in the same session
SELECT value_two
     , json_agg(row_to_json((value_three, value_four)::foo)) AS value_four
FROM   mytable
GROUP  BY value_two;

Of gebruik een subselect in plaats van de ROW uitdrukking. Uitgebreider, maar zonder typecast:

SELECT value_two
     , json_agg(row_to_json((SELECT t FROM (SELECT value_three, value_four) t))) AS value_four
FROM   mytable
GROUP  BY value_two;

Meer uitleg in Craig's gerelateerde antwoord:

  • PostgreSQL 9.2 row_to_json() met geneste joins

db<>viool hier
Oude sqlfiddle




  1. Werken uw medewerkers op afstand? Hier leest u hoe u uw gegevens veilig kunt houden.

  2. 3 manieren om de Modulo terug te sturen in MariaDB

  3. ORA-01460:niet-geïmplementeerde of onredelijke conversie gevraagd

  4. Hoe voer ik een opgeslagen procedure van MS SQL Server uit in java/jsp, waarbij tabelgegevens worden geretourneerd?