【发布时间】:2021-09-23 23:13:28
【问题描述】:
我有一个 openapi 规范,我想在该规范上选择一个路径子集(因此,按键过滤)。我无法让 with_entries 命令过滤路径列表。
示例 JSON:
{
"swagger": "2.0",
"info": {},
"host": "petstore.swagger.io",
"basePath": "/api",
"schemes": [],
"consumes": [],
"produces": [],
"paths": {
"/pets": {},
"/pets/{id}": {}
},
"definitions": {}
}
输入是json,输出应该是相同的json,但只留下'/pets'路由(过滤掉“/pets/{id}”路由)。
我们将有一个可能包含 20 条路线的列表,因此想要一个干净的解决方案,并允许我将 ~20 条路线分别指定为变量。
我尝试了here 的一些答案并想出了这个:(我们还需要捕获并保留其他顶级键,但我现在专注于路径过滤,但答案是非常欢迎!)
.paths
["/pets"] as $whitelist
| with_entries( select( .key as $k | any( $whitelist[]; . == $k) ) )
但是,这会产生错误 (jq: error (at file.json:xx): Cannot iterate over null (null)
所以有两个问题需要解决:
- 如何保留原始json中的所有元素,但过滤掉部分路径
- 如何使脚本“干净”,以便轻松维护要保留的路径列表
【问题讨论】: