从Postgres中选择列并将其转换为JSON

5

i have a table employee like this

name     value 
'e1'     'rahul'
'e2'     'priya'
'e3'     'abhijit'

我需要从这两列中提取JSON,使结果类似于以下内容:

{'e1':'rahul','e2':'priya','e3':'abhijit'}

我尝试了以下查询,并且结果如下

select row_to_json((name,value)) from employee 

O/P

{'f1':'e1','f2':'rahul'}
{'f2':'e1','f2':'priya'}
{'f3':'e1','f2':'abhijit'}

我不想让f1和f2的名称出现在那里,请给予建议!
3个回答

13

感谢大家的建议,但我刚刚发现我必须将PostgreSQL从9.3升级到9.4才能使用json_build_object函数。只需对查询结构进行几个更改就可以完成工作。

select json_agg(json_build_object(name,value)) from employee;

[{'e1':'rahul','e2':'priya','e3':'abhijit'}]

2
连接空字符串有什么意义呢?除非该列的类型不是_text_,否则似乎可以直接显式转换为name::text - overdawn
@overdawn 你说得对。连接是无用的。回答已更新。 - Ashish Padakannaya

11
SELECT ROW_TO_JSON(a) FROM (SELECT name, value FROM employee) a;

2
如果我理解你的问题正确,那么就像这里提到的一样,在Postgres 9.4+中,您可以使用json_build_object():
create temp table employee as (select 'key'::text as name, 'val'::text as value);
select json_build_object(name,value) from employee;

这是结果:

json_build_object
-------------------
 {"key" : "val"}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接