如何解决如何控制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 列,其中的内容遵循统一但笨拙的模式。多亏了 this useful answer,我才成功地做到了这一点,但密钥的顺序并不是我需要的。
解决方法
jsonb
以已解析的形式存储数据,从而可以高效地访问其部分。因此,原始字符串的格式没有保留,属性的顺序也没有保留,不能有重复的属性。所以你所要求的是不可能的。
您可以使用 json
数据类型,它本质上是一个经过语法检查并保留原始顺序的字符串。
要在聚合期间建立顺序,请使用 json_agg(... ORDER BY ...)
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。