我正在尝试构建一个jsonb对象,它的键按字母顺序排列。然而,jsonb_object_agg(k, v)
似乎忽略了输入的顺序,并按键长度排序输入,然后按字母顺序排序。
例如
select jsonb_object_agg(k, v order by k) from (
values ('b', 'b_something'), ('ab', 'ab_something')
) as t (k,v)
给予
{
"b": "b_something",
"ab": "ab_something"
}
但我需要的是
{
"ab": "ab_something"
"b": "b_something",
}
有没有办法做到这一点?
Context我正在扁平化一个json列,其中的内容遵循统一但笨拙的模式。多亏了this useful answer,我已经成功地做到了这一点,但密钥的顺序不是我需要它们的方式。
1条答案
按热度按时间iq0todco1#
jsonb
以解析的形式存储数据,这使得访问其部分变得高效。因此,原始字符串的格式不会保留,属性的顺序也不会保留,您也不能拥有重复的属性。你所要求的是不可能的。您可以使用
json
数据类型,它本质上是一个带有语法检查的字符串,可以保留原始顺序。要在聚合期间建立顺序,请使用
json_agg(... ORDER BY ...)
。