按外部对象名称对JSON文件排序

camsedfj  于 2023-02-17  发布在  其他
关注(0)|答案(2)|浏览(121)

我有一个json文件input.json,因此:

{
   "foo":{
       "prefix":"abc",
       "body":[1,2,3]
   },
   "bar":{
       "prefix":"def",
       "body":[4,5,6]    
   }
}

我想按外部对象名称排序,"bar""foo"之前,按字母顺序如下:

{
   "bar":{
       "prefix":"def",
       "body":[4,5,6]    
   },
   "foo":{
       "prefix":"abc",
       "body":[1,2,3]
   }
}

以产生文件X1 M3 N1 X。
此问题的不同版本(herehere)已被问及Java/Javascript
有没有一种方法可以使用sed/awk或boost.json之类的命令行工具来完成此操作?

ulmd4ohb

ulmd4ohb1#

使用jq,您可以使用keys内置函数以排序顺序获取键名,并形成相应的值对象

jq 'keys[] as $k | { ($k) : .[$k] }' json

注意,jq确实有一个字段--sort-keys选项,不能在这里使用,因为它也在内部排序内部级别对象。

bxgwgixi

bxgwgixi2#

下面是一个无变量的jq解:

to_entries | sort_by(.key) | from_entries

还值得注意的是,jq的Go实现gojq目前总是对所有JSON对象中的键进行排序。

相关问题