我想通过以紧凑模式(-c
)打印来压缩json文件的空间,但我想在每个根级对象之后添加新行.
例如,对于下面的对象
{
"a": {
"a1": 1,
"a2": [
null
]
},
"b": {
"b1": "test"
},
"c": [
1,
2,
3
]
}
我想把它印成
{
"a":{"a1":1,"a2":[null]},
"b":{"b1":"test"},
"c":[1,2,3]
}
即,每行一个根级别对象(添加开始/结束括号)
我使用以下命令在一行中打印了每一项
echo '{"a":{"a1":1, "a2":[null]}, "b": {"b1":"test"}, "c": [1,2,3]}' | jq -c -r '. | to_entries | .[] | "\"\(.key)\": \(.value)"'
"a": {"a1":1,"a2":[null]}
"b": {"b1":"test"}
"c": [1,2,3]
但是我不能形成一个有效的JSON对象.
有谁能给我提点建议吗? 谢谢
最新情况:
我使用JQ和Perl的组合设法实现了这一目标
echo '{"a":{"a1":1, "a2":[null]}, "b": {"b1":"test"}, "c": [1,2,3]}' | jq -c -r '. | to_entries | .[] | @json "\(.key): \(.value)"' | perl -pe 's/$/,/m if !eof' | perl -p0e 's/^/{\n/' | perl -p0e 's/$/\n}/'