我目前正尝试使用jq命令行
在json下面进行处理cat api-docs.json | jq '.paths'
{
...
...
"paths": {
"/pets": {
"get": {
...
...
"post": {
...
...
"/pets/{petId}": {
"get": {
...
https://jqplay.org/s/GV2zMjbCWK
我需要来自上面的swagger规范的扁平化信息
[ "GET /pets", "POST /pets", "GET /pets/{petId}" ]
使用jq
命令可以实现吗?
以下我独立得到每个值
.paths|{k:keys,v:map(keys)}
但我需要的是一种在嵌套级别组合键以获得上述结果的方法,即“METHOD / PATH”数组
答案 0 :(得分:2)
以下过滤器会生成您想要的结果,如下所示:
.paths
| to_entries
| map( .key as $path
| ( .value | to_entries[]
| if .key == "get" then "GET"
elif .key == "post" then "POST"
else empty end ) as $verb
| $verb + " " + $path )
输出:
[
"GET /pets",
"POST /pets",
"GET /pets/{petId}"
]
您可能希望包含更多"动词",或以编程方式处理动词,例如
.paths
| to_entries
| map(( .value | to_entries[] | .key | ascii_upcase ) + " " + .key)
此处解决方案的关键是to_entries
,它会生成{" key":_," value":_}形式的对象数组。除了map
,这里省去了解包数组然后重新打包,其余的是语法: - )