Ale*_*ers 4 formatting json pretty-print jq
我从 jq 得到的是:
{
"frameGrid": {
"size": [
24,
24
],
"dimensions": [
1,
1
],
"names": [
[
"default"
]
]
}
}
Run Code Online (Sandbox Code Playgroud)
我希望看到的是更像这样的东西:
{
"frameGrid": {
"size": [24,24],
"dimensions": [1,1],
"names": [["default"]]
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这两种形式都是有效的,并且 jq 具有紧凑/漂亮的打印模式。但中间有什么吗?我希望以某种方式格式化一个更大的 json 文件,该文件具有比这更多的数组值,以便它易于阅读和打印。也许我只是为这项工作使用了错误的工具?
(请原谅可怕的格式选择。似乎代码示例不太喜欢 json 格式)
虽然如果您的 json 不是太复杂,最好使用类似 one peak的工具,但您可以使用第二个 jq 调用对第一个的输出进行后处理。例如,如果您的数据在data.json
$ jq -M . data.json | jq -MRsr 'gsub("\n +";"")|gsub("\n ]";"]")'
Run Code Online (Sandbox Code Playgroud)
产生
{
"frameGrid": {
"size": [24,24],
"dimensions": [1,1],
"names": [["default"]]
}
}
Run Code Online (Sandbox Code Playgroud)
正如@jq170727提到的,在jq(例如)的漂亮打印运行之后的后处理jq .值得考虑。本着这种精神,这里有一个 awk 脚本可能就足够了:
#!/bin/bash
awk '
function ltrim(x) { sub(/^[ \t]*/, "", x); return x; }
s && NF > 1 && $NF == "[" { s=s $0; next}
s && NF == 1 && $1 == "]," { print s "],"; s=""; next}
s && NF == 1 && $1 == "[" { print s; s=$0; next}
s && NF == 1 && $1 == "{" { print s; print; s=""; next}
s && NF == 1 && $1 == "]" { print s $1; s=""; next}
s && NF == 1 && $1 == "}" { print s; s=$0; next}
s { s=s ltrim($0); next}
$NF == "[" { s=$0; next}
{print}
'
Run Code Online (Sandbox Code Playgroud)
使用示例输入,调用:
jq . example.json | ./pp
Run Code Online (Sandbox Code Playgroud)
产生:
{
"frameGrid": {
"size": [24,24],
"dimensions": [1,1],
"names": [
["default"]
]
}
}
Run Code Online (Sandbox Code Playgroud)
调用:
jq -n '{a:[1,2,3,[1,2,3,4]],b:2,c:{d:[1,2,{e:[3,4]}]}}' | ./pp
Run Code Online (Sandbox Code Playgroud)
产生:
{
"a": [1,2,3,
[1,2,3,4]
],
"b": 2,
"c": {
"d": [1,2,
{
"e": [3,4]
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1652 次 |
| 最近记录: |