2014-07-15 14 views
8

Ho una tabella definita come questo:Crea JSON con valori delle colonne come chiavi oggetto

CREATE TABLE data_table AS (
    id bigserial, 
    "name" text NOT NULL, 
    "value" text NOT NULL, 
    CONSTRAINT data_table_pk PRIMARY KEY (id) 
); 

INSERT INTO data_table ("name", "value") VALUES 
('key_1', 'value_1'), 
('key_2', 'value_2'); 

vorrei ottenere un oggetto JSON da questo contenuto tavolo, che sarà simile a questa:

{ 
    "key_1":"value_1", 
    "key_2":"value_2" 
} 

Ora sto utilizzando l'applicazione client per analizzare il set di risultati in formato JSON. È possibile farlo con una richiesta postgresl?

risposta

10

Se siete su 9.4 è possibile effettuare le seguenti operazioni:

$ select json_object_agg("name", "value") from data_table; 
      json_object_agg 
---------------------------------------------- 
{ "key_1" : "value_1", "key_2" : "value_2" } 
+0

Sembra che questo dovrebbe essere incluso in questa pagina: https://www.postgresql.org/docs/9.6/static/functions-json.html ma invece includono una piccola nota su di esso in questa pagina: https://www.postgresql.org/docs/9.6/static/functions-aggregate.html – chrismarx

6
select 
    format(
     '{%s}', 
     string_agg(format(
      '%s:%s', 
      to_json("name"), 
      to_json("value") 
     ), ',') 
    )::json as json_object 
from data_table; 
      json_object    
--------------------------------------- 
{"key_1":"value_1","key_2":"value_2"} 
+0

ho dovuto cambiare ' '% s:% s'' a'' "% s":% s'' personalmente per farlo funzionare. Ma funziona. Grazie! –

Problemi correlati