按路由过滤 openapi 规范
Filter openapi spec by routes
我有一个 openapi 规范,我想 select 路径的一个子集(因此,按键过滤)。我无法让 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 条路线分别指定为变量。
我尝试了一些答案 并得出了这个:(我们还需要捕获并保留其他顶级键,但我现在专注于路径过滤,但一个答案非常欢迎!)
.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 中的所有元素,但过滤掉一些路径
- 如何制作脚本 'clean' 以便可以轻松维护要保留的路径列表
我更喜欢构建查找 table。
jq '
( ["/pets"] | map({ (.): true }) | add ) as $whitelist |
.paths |= with_entries(select( $whitelist[.key] ))
'
我有一个 openapi 规范,我想 select 路径的一个子集(因此,按键过滤)。我无法让 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 条路线分别指定为变量。
我尝试了一些答案
.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 中的所有元素,但过滤掉一些路径
- 如何制作脚本 'clean' 以便可以轻松维护要保留的路径列表
我更喜欢构建查找 table。
jq '
( ["/pets"] | map({ (.): true }) | add ) as $whitelist |
.paths |= with_entries(select( $whitelist[.key] ))
'