例如,我有以下 json 文件:
{
"FOO": {
"name": "Donald",
"location": "Stockholm"
},
"BAR": {
"name": "Walt",
"location": "Stockholm"
},
"BAZ": {
"name": "Jack",
"location": "Whereever"
}
}
我有这个 jq 命令:
cat json | jq .[] | {newname : select(.location=="Stockholm") | .name , contains_w : select(.location=="Stockholm") | .name | startswith("W")}
所以我得到了结果:
{
"newname": "Donald",
"contains_w": false
}
{
"newname": "Walt",
"contains_w": true
}
我的问题是:有没有办法DRY
我的命令?
我的意思是如何在没有重复部分的情况下获得相同的结果:
select(.location=="Stockholm") | .name
如何重用 newname 字段的结果?
我有一个非常大的文件要处理,所以我不想浪费时间和资源。
答案 0 :(得分:0)
您在对象构建过程中进行了多次过滤。您可以先过滤,然后在过滤后的列表上进行构建,例如。
map(select(.location=="Stockholm"))
| map({newname: .name, contains_w: (.name | startswith("W"))})