从jq json输出中排除列

Leo*_*cci 26 json jq

我想在timestamp这里使用jq JSON处理器摆脱这个领域.

[
  {
    "timestamp": 1448369447295,
    "group": "employees",
    "uid": "elgalu"
  },
  {
    "timestamp": 1448369447296,
    "group": "employees",
    "uid": "mike"
  },
  {
    "timestamp": 1448369786667,
    "group": "services",
    "uid": "pacts"
  }
]
Run Code Online (Sandbox Code Playgroud)

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

最终我真正喜欢的是具有如下唯一值的列表:

employees,elgalu
employees,mike
services,pacts
Run Code Online (Sandbox Code Playgroud)

hek*_*mgl 50

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

jq 'del(.[].timestamp)' input.json
Run Code Online (Sandbox Code Playgroud)

但是为了达到理想的输出,我不会使用这个del()功能.既然你知道哪些字段应该出现在输出中,你可以简单地使用group和填充一个数组,id然后使用该join()函数:

jq -r '.[]|[.group,.uid]|join(",")' input.json
Run Code Online (Sandbox Code Playgroud)

-r代表原始产量.jq不会在值周围打印引号.

输出:

employees,elgalu
employees,mike
services,pacts
Run Code Online (Sandbox Code Playgroud)

  • 很棒的答案!此外,如果您要在CSV上使用它,请考虑使用`@ csv`过滤器而不是`join`ing. (4认同)
  • 相关地,要选择要删除的多个路径表达式,我们可以 `del(.[]["timestamp", "group"])` (2认同)

pea*_*eak 5

为了记录,另一种选择是:

$ jq -r '.[] | "\(.uid),\(.group)"' input.json
Run Code Online (Sandbox Code Playgroud)

(白名单方法可以轻松重新排列顺序,这种变体可以很容易地修改间距等)

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

$ jq -r '.[] | [.uid, .group] | @csv' input.json
"elgalu","employees"
"mike","employees"
"pacts","services"
Run Code Online (Sandbox Code Playgroud)