繁体   English   中英

使用jq从其他数组派生一个数组(请参阅Python列表推导)

[英]Deriving an array from other arrays with jq (cf. Python list comprehensions)

给定以下json,其中包含两个数组:

{"zones":["dev01","dev02","dev03","dev04","dev05","dev06","dev07","dev08","dev09","dev10","dev11","dev12","dev13","dev14","dev15","dev16","dev17","dev18","dev19","dev20"],"disabled_zones":["dev01","dev05","dev06","dev08","dev10","dev11","dev12","dev13","dev14","dev15","dev16","dev17","dev18","dev19","dev20"]}

我希望派生第三个数组,其中包含在第一个数组中出现但不在第二个数组中的项:

{"enabled_zones":["dev02","dev03","dev04","dev07","dev09"]}

我想使用jq完成此任务

在python中,我将使用列表推导来实现此目的:

>>> zones = ["dev01","dev02","dev03","dev04","dev05","dev06","dev07","dev08","dev09","dev10","dev11","dev12","dev13","dev14","dev15","dev16","dev17","dev18","dev19","dev20"]
>>> disabled_zones = ["dev01","dev05","dev06","dev08","dev10","dev11","dev12","dev13","dev14","dev15","dev16","dev17","dev18","dev19","dev20"]
>>> enabled_zones = [x for x in zones if x not in disabled_zones]
>>> print(enabled_zones)
['dev02', 'dev03', 'dev04', 'dev07', 'dev09']

我目前正在尝试使用foreach array1中的项目,并使用in检查它们是否存在于array2中in但是我在语法上苦苦挣扎。

我如何使用jq实现呢?

jq手册

除了对数字进行常规算术减法外,-运算符还可用于数组,以从第一个数组中删除所有出现的第二个数组元素。

这会做:

jq '{ "enabled_zones": (.zones - .disabled_zones) }' data.json

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM