从jq json输出中排除列

时间:2015-11-24 13:33:20

标签: json jq

我想使用jq JSON处理器摆脱timestamp字段。

[
  {
    "timestamp": 1448369447295,
    "group": "employees",
    "uid": "elgalu"
  },
  {
    "timestamp": 1448369447296,
    "group": "employees",
    "uid": "mike"
  },
  {
    "timestamp": 1448369786667,
    "group": "services",
    "uid": "pacts"
  }
]

白名单也适用于我,即select uid, group

最终我真正想要的是一个具有如下唯一值的列表:

employees,elgalu
employees,mike
services,pacts

2 个答案:

答案 0 :(得分:41)

如果您只想删除时间戳,可以使用del()功能:

jq 'del(.[].timestamp)' input.json

但要实现所需的输出,我不会使用del()函数。由于您知道输出中应显示哪些字段,因此您只需使用groupid填充数组,然后使用join()函数:

jq -r '.[]|[.group,.uid]|join(",")' input.json

-r代表原始输出jq不会在值周围打印引号。

输出:

employees,elgalu
employees,mike
services,pacts

答案 1 :(得分:5)

对于记录,另一种选择是:

$ jq -r '.[] | "\(.uid),\(.group)"' input.json

(白名单方法可以轻松重新排列顺序,此变体可以轻松修改间距等。)

以下示例可能对任何想要安全CSV的人感兴趣(即使值已嵌入逗号或换行符):

$ jq -r '.[] | [.uid, .group] | @csv' input.json
"elgalu","employees"
"mike","employees"
"pacts","services"