使用列值作为对象键创建json

Prz*_*mek 8 postgresql json postgresql-9.3

我有一个像这样定义的表:

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');
Run Code Online (Sandbox Code Playgroud)

我想从这个表内容中获取一个JSON对象,它看起来像这样:

{
  "key_1":"value_1",
  "key_2":"value_2"
}
Run Code Online (Sandbox Code Playgroud)

现在我正在使用客户端应用程序将结果集解析为JSON格式.是否可以通过postgresl查询来实现这一目标?

小智 16

如果您使用的是9.4,则可以执行以下操作:

$ select json_object_agg("name", "value") from data_table;
           json_object_agg
----------------------------------------------
{ "key_1" : "value_1", "key_2" : "value_2" }
Run Code Online (Sandbox Code Playgroud)

  • 似乎这真的应该包含在这个页面上:https://www.postgresql.org/docs/9.6/static/functions-json.html 但是他们在这个页面上包含了一个关于它的小注释:https:/ /www.postgresql.org/docs/9.6/static/functions-aggregate.html (2认同)

Clo*_*eto 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"}
Run Code Online (Sandbox Code Playgroud)