我有以下file1 json:
{
"name": "eye",
"attributes": [
{
"name": "Width",
"value": "1920"
},
{
"name": "Height",
"value": "1080"
},
{
"name": "WinKeyMapping",
"value": "leftwin"
}
],
"starts": [
{
"name": "step1",
"attributeList": [
{
"name": "Command",
"value": "bash"
},
{
"name": "Test",
"value": "none"
}
]
}
]
}
和以下过滤器:
$ jq '.starts[].attributeList[]|select(.name=="Command")' file1
{
"name": "Command",
"value": "bash"
}
$
我怎样才能得到这个选择的整个结构?
预期输出:
{
"starts": [
{
"attributeList": [
{
"name": "Command",
"value": "bash"
}
]
}
]
}
直截了当
jq
:输出:
以下是获得所需输出的两个选项。
您可以删除不需要的密钥:
或者您可以只选择您想要的键:
两者都给出相同的结果。此外,如果您愿意
starts
并且ends
在后一种情况下,您可以添加额外的or
语句:map(select((.key == "starts") or (.key == "ends")))
.更通用的方法
jq
:这是一个
jq
删除文档的所有路径的函数,该路径不位于给定参数路径上的任何位置,这可能是一个select()
调用。将它保存在 中
pick_out.jq
,我们可以像这样使用它:输出: