I have a json file input.json
thus:
{
"foo":{
"prefix":"abc",
"body":[1,2,3]
},
"bar":{
"prefix":"def",
"body":[4,5,6]
}
}
I would like to sort it by the outer object names, with "bar"
coming before "foo"
in alphabetical order like so:
{
"bar":{
"prefix":"def",
"body":[4,5,6]
},
"foo":{
"prefix":"abc",
"body":[1,2,3]
}
}
to produce file output.json
.
Versions of this question have been asked of Java/Javascript (here and here)
Is there a way to accomplish this using a command line tool like sed/awk or boost.json?
2
Answers
Using
jq
, you could use thekeys
built-in to get the key names in sorted order and form the corresponding value objectNote that
jq
does have a field--sort-keys
option, which cannot be used here, as it internally sorts the inner level objects as well.Here’s a variable-free jq solution:
It is also worth noting that
gojq
, the Go implementation of jq, currently always sorts the keys within all JSON objects.