2017-12-28 2 views
0

Ich möchte die row_to_json(row) Funktion verwenden, um ein JSON-Objekt in der Datenbank direkt zu erstellen. Dies funktioniert wie erwartet:Wie erstellt man eine Zeile ohne die Spaltennamen zu verlieren, für die Eingabe von row_to_json?

select row_to_json(country) from country 

Es gibt so etwas wie:

[ 
    {"identifier": 1234, "name": "US"}, 
    {"identifier": 5678, "name": "France"}, 
    .... 
] 

Wenn jedoch manuell eine Reihe zu schaffen, verliere ich die Spaltennamen. Zum Beispiel kann die folgende Abfrage:

select row_to_json(row(country.identifier, country.name)) from country 

gibt:

[ 
    {"f1": 1234, "f2": "US"}, 
    {"f1": 5678, "f2": "France"}, 
    .... 
] 

Dieses Konstrukt verliert die Spaltennamen. Ich brauche diese Spaltennamen in meiner Ausgabe.

fand ich eine Lösung:

with country as (select identifier, name from country) 
select row_to_json(country) from country 

Gibt es eine Möglichkeit, dies direkt zu tun - das heißt, ohne einen CTE?

Antwort

1

können Sie eine abgeleitete Tabelle verwenden:

select row_to_json(t) 
from (
    select identifier, name 
    from country 
) t 

Oder Sie verwenden json_build_object(), aber das würde erfordern, die Spaltennamen zu wiederholen:

select json_build_object('identifier', identifier, 'name', name) 
from country 
+0

Ich hoffte, es ist etwas weniger ungeschickt oder sich wiederholende war. .. schade. Danke für die Alternativen! –

Verwandte Themen