按路由过滤 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)

所以有两个问题需要解决:

  1. 如何保留原始 json 中的所有元素,但过滤掉一些路径
  2. 如何制作脚本 'clean' 以便可以轻松维护要保留的路径列表

我更喜欢构建查找 table。

jq '
   ( ["/pets"] | map({ (.): true }) | add ) as $whitelist |
   .paths |= with_entries(select( $whitelist[.key] ))
'

jqplay