2014-07-15 7 views
8

मैं है एक मेज इस तरह के रूप में परिभाषित स्तंभ मान के साथ json बनाएँ:वस्तु कुंजी

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'); 

मैं इस तालिका सामग्री से एक JSON वस्तु है, जो इस तरह दिखेगा प्राप्त करना चाहते हैं:

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

अब मैं परिणाम JSON प्रारूप में सेट पार्स करने के लिए क्लाइंट अनुप्रयोग का उपयोग कर रहा हूँ। यह एक postgresl क्वेरी से यह पूरा करना संभव है?

उत्तर

10

आप 9.4 पर हैं, तो आप निम्न कर सकते हैं:

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

इस तरह लगता है वास्तव में इस पृष्ठ पर शामिल किया जाना चाहिए: https://www.postgresql.org/docs/9.6/static/functions-json.html लेकिन इसके बजाय वे इसे इस पृष्ठ पर होने के बारे में एक छोटे से टिप्पणी में शामिल हैं: 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

मैं बदलने के लिए 'था '% s:% s'' को'' "% s":% s'' व्यक्तिगत रूप से यह काम करने के लिए। लेकिन यह काम करता है। धन्यवाद! –

संबंधित मुद्दे