Postgresql JSon 行到键值
Postgresql JSon rows to key-value
目前我有以下 postgresql json 数组对象形式的对象
[
{
"id": 1,
"name": "dollar",
"sign": "$",
"exchange_rate": 1
},
{
"id": 2,
"name": "Riel",
"sign": "៛",
"exchange_rate": 4085
},
{
"id": 3,
"name": "Baht",
"sign": "b",
"exchange_rate": 30.55
},
{
"id": 4,
"name": "Dong",
"sign": "d",
"exchange_rate": 16000
}
]
数组对象是以下查询的结果:
select json_agg(row_to_json(record))
from (
select
c.id,
c.name,
c.sign,
c.exchange_rate
from currency c) record;
但上面的结果与我的需求略有不同。我想将该数组切换为另一种形式的键值对象,如下所示,这样我就可以通过 id 值遍历 json。
{
"1": {
"name": "dollar",
"sign": "$",
"exchange_rate": 1
},
"2": {
"name": "Riel",
"sign": "៛",
"exchange_rate": 4085
},
"3": {
"name": "Baht",
"sign": "b",
"exchange_rate": 30.55
},
"4": {
"name": "Dong",
"sign": "d",
"exchange_rate": 16000
}
}
任何人都可以为我提供一些帮助来解决这个问题。尊重您的所有回答。
JSON_BUILD_OBJECT()
与 JSON_OBJECT_AGG()
一起使用
SELECT JSON_OBJECT_AGG(id,
JSON_BUILD_OBJECT('name',name,
'sign',sign,
'exchange_rate',exchange_rate))
FROM currency
或保持原有功能考虑简单使用
SELECT JSON_OBJECT_AGG(id, ROW_TO_JSON(c)::JSONB - 'id' )
FROM currency AS c
P.S: JSONB_PRETTY()
可能会添加,如演示中所述,将应用的最外层函数包装起来,为了显示结果格式化好。
目前我有以下 postgresql json 数组对象形式的对象
[
{
"id": 1,
"name": "dollar",
"sign": "$",
"exchange_rate": 1
},
{
"id": 2,
"name": "Riel",
"sign": "៛",
"exchange_rate": 4085
},
{
"id": 3,
"name": "Baht",
"sign": "b",
"exchange_rate": 30.55
},
{
"id": 4,
"name": "Dong",
"sign": "d",
"exchange_rate": 16000
}
]
数组对象是以下查询的结果:
select json_agg(row_to_json(record))
from (
select
c.id,
c.name,
c.sign,
c.exchange_rate
from currency c) record;
但上面的结果与我的需求略有不同。我想将该数组切换为另一种形式的键值对象,如下所示,这样我就可以通过 id 值遍历 json。
{
"1": {
"name": "dollar",
"sign": "$",
"exchange_rate": 1
},
"2": {
"name": "Riel",
"sign": "៛",
"exchange_rate": 4085
},
"3": {
"name": "Baht",
"sign": "b",
"exchange_rate": 30.55
},
"4": {
"name": "Dong",
"sign": "d",
"exchange_rate": 16000
}
}
任何人都可以为我提供一些帮助来解决这个问题。尊重您的所有回答。
JSON_BUILD_OBJECT()
与 JSON_OBJECT_AGG()
一起使用
SELECT JSON_OBJECT_AGG(id,
JSON_BUILD_OBJECT('name',name,
'sign',sign,
'exchange_rate',exchange_rate))
FROM currency
或保持原有功能考虑简单使用
SELECT JSON_OBJECT_AGG(id, ROW_TO_JSON(c)::JSONB - 'id' )
FROM currency AS c
P.S: JSONB_PRETTY()
可能会添加,如演示中所述,将应用的最外层函数包装起来,为了显示结果格式化好。