我有一个JSON文件:
[
{
"platform": "p1",
"id": "5",
"pri": "0",
"sec": "20"
}
]
[
{
"platform": "p2",
"id": "6",
"pri": "10",
"sec": "0"
}
]
我可以将其格式化为:
$ jq -c '.[]|{PLATFORM: .platform, ID: .id, PRI: .pri, SEC: .sec}' test.json
{"PLATFORM":"p1","ID":"5","PRI":"0","SEC":"20"}
{"PLATFORM":"p2","ID":"6","PRI":"10","SEC":"0"}
$
但是如何忽略带有“0”的SEC / PRI并以表格形式输出:
PLATFORM:p1, ID:5, SEC:20
PLATFORM:p2, ID:6, PRI:10
我可以使用bash / awk命令处理它,但也许有人直接使用jq解决方案。
谢谢,
答案 0 :(得分:2)
您可以使用条件语句删除不需要的密钥,例如:
if (.sec == "0") then del(.sec) else . end
通过将数据转换为数组,可以使用@tsv
完成格式化,例如:
<强> filter.jq 强>
.[] |
if (.sec == "0") then del(.sec) else . end |
if (.pri == "0") then del(.pri) else . end |
to_entries |
map("\(.key | ascii_upcase):\(.value)") |
@tsv
像这样运行:
jq -crf filter.jq test.json
输出:
PLATFORM:p1 ID:5 SEC:20
PLATFORM:p2 ID:6 PRI:10
答案 1 :(得分:0)
jq
解决方案:
jq -c 'def del_empty($k): if (.[$k]|tonumber > 0) then . else del(.[$k]) end;
.[] | {PLATFORM: .platform, ID: .id, PRI: .pri, SEC: .sec}
| del_empty("PRI")
| del_empty("SEC")' test.json
输出:
{"PLATFORM":"p1","ID":"5","SEC":"20"}
{"PLATFORM":"p2","ID":"6","PRI":"10"}