如何控制 jsonb_object_agg 中字段的顺序

How to control order of fields in jsonb_object_agg

我正在尝试使用按字母顺序排列的键构建一个 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",
}

有办法实现吗?

上下文 我正在展平一个 json 列,其中的内容遵循统一但笨拙的架构。感谢 ,我已经成功地做到了,但是键的顺序不是我需要的。

jsonb 以经过解析的形式存储数据,这使得访问其部分变得高效。结果,原始字符串的格式没有保留,属性的顺序也没有保留,你不能有重复的属性。所以你要求的是不可能的。

您可以使用 json 数据类型,它本质上是一个带有语法检查并保留原始顺序的字符串。

要在聚合期间建立顺序,请使用 json_agg(... ORDER BY ...)