如何在Postgres中选择一列json对象,以便返回的行是数组的json数组?
我有一个带有单个jsonb列的表。如何执行select查询,将每个jsonb行转换为jsonb数组,其中每个项都是另一个数组,第一个索引是键,第二个索引是值?钥匙没有提前知道 使用此查询选择列:如何在Postgres中选择一列json对象,以便返回的行是数组的json数组?,json,postgresql,jsonb,Json,Postgresql,Jsonb,我有一个带有单个jsonb列的表。如何执行select查询,将每个jsonb行转换为jsonb数组,其中每个项都是另一个数组,第一个索引是键,第二个索引是值?钥匙没有提前知道 使用此查询选择列: 从myTable中选择myRow 返回具有以下jsonb值的行: { "key1": "value1", "key2": "value2", "key3": "value3", "key4": "value4", "key5": "value5" } 我希望输
从myTable中选择myRow
返回具有以下jsonb值的行:
{
"key1": "value1",
"key2": "value2",
"key3": "value3",
"key4": "value4",
"key5": "value5"
}
我希望输出行如下所示:
[
["key1", "value1"],
["key2", "value2"],
["key3", "value3"],
["key4", "value4"],
["key5", "value5"]
]
select arr
from data
join lateral(
select jsonb_agg(jsonb_build_array(key, value)) arr
from jsonb_each(j)
) sub on true;
json\u每个
将json对象扩展为每个属性一行。它为键创建一列,为值创建一列json\u build\u array
为每个记录创建内部数组json_agg
将(2)中的数组聚合为一个大数组S-Man的查询将把原始表中的所有行合并到一个大数组中。你的问题有点不清楚你到底想要不想要。如果希望每一行都有自己的数组,可以执行以下操作:
[
["key1", "value1"],
["key2", "value2"],
["key3", "value3"],
["key4", "value4"],
["key5", "value5"]
]
select arr
from data
join lateral(
select jsonb_agg(jsonb_build_array(key, value)) arr
from jsonb_each(j)
) sub on true;
下面是一个使用CTE数据的示例:
with data(j) as (
select '{
"key1": "value1",
"key2": "value2",
"key3": "value3",
"key4": "value4",
"key5": "value5"
}'::jsonb
UNION select '{"key6": "value6"}'
)
select arr
from data
join lateral(
select jsonb_agg(jsonb_build_array(key, value)) arr
from jsonb_each(j)
) sub on true;
arr
------------------------------------------------------------------------------------------------------
[["key6", "value6"]]
[["key1", "value1"], ["key2", "value2"], ["key3", "value3"], ["key4", "value4"], ["key5", "value5"]]
(2 rows)
你说得对,我应该说得更清楚些。谢谢。true上的
sub在结尾做了什么?sub只是subselect所需的别名。on true是连接条件,也是必需的,对于此横向连接,该条件应始终为true