我的数据是一系列JSON数组.每个数组都有一个或多个带有name和id键的元素:
[
{
"name": "first_source",
"id": "abcdef"
},
{
"name": "second_source",
"id": "ghijkl"
},
{
"name": "third_source",
"id": "opqrst"
}
]
Run Code Online (Sandbox Code Playgroud)
如何使用jq,我只选择包含带有"first source"作为名称值的元素的数组,但是不包含"second_source"作为任何元素的名称值?
这只返回一个元素以供进一步处理:
jq '.[] | select (.name == "first_source")
Run Code Online (Sandbox Code Playgroud)
但我显然需要返回整个数组才能使我的方案正常工作.
您可以使用此过滤器:
select(
(map(.name == "first_source") | any) and
(map(.name != "second_source") | all)
)
Run Code Online (Sandbox Code Playgroud)
您需要测试数组的所有元素是否存在名称.您可以通过将每个对象映射到您的条件并适当地使用any或all过滤来实现.
在这里,您想要查看是否有任何项目已命名"first_source"且所有项目都未命名"second_source".
| 归档时间: |
|
| 查看次数: |
4389 次 |
| 最近记录: |