我想在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)
为了记录,另一种选择是:
$ 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)