带条件和格式输出/标签的jq查询

时间:2018-01-22 15:16:44

标签: jq

我有一个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解决方案。

谢谢,

2 个答案:

答案 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"}