我是一个新的jq,这一个似乎不可能写。所以需要一些帮助,从jq大师在那里:
我有一个Open API规范文件,以版本3.0为例:paths
元素列出了endpoints
,每个元素都有方法(get
、post
等)。
我需要一个jq过滤器来只选择那些用"x-visibility": "public"
标记的方法,而忽略其他的一切。
到目前为止,我已经尝试过以下方法:
.paths |= map(select(.[]."x-visibility" == "public" | not))
显然,这行不通。
如有任何帮助/提示,我们将不胜感激!
下面是OpenAPI 3.0规范文件(去掉了额外的内容):
{
"openapi": "3.0.1",
"info": {
"title": "API service",
"description": "Exposing useful methods",
"x-descriptionForPublicDocs": "This is a test description for public docs specifically",
"contact": {
"name": "Message me",
"url": "https://message.me"
},
"version": "1.0"
},
"servers": [
{
"url": "http://localhost:9090",
"description": "Generated server url"
}
],
"tags": [
{
"name": "AccountGroups"
}
],
"x-tags": [
{
"name": "TestResourceLists"
}
],
"paths": {
"/crane/v1/resource_list/{id}": {
"get": {
"tags": [
"ResourceLists"
],
"x-tags": "TestResourceLists",
"x-visibility": "public",
"summary": "Get Resource List by ID",
"description": "Returns the resource list that has the specified ID.",
"operationId": "getById",
"parameters": [
{
"name": "id",
"in": "path",
"description": "ResourceList Id",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Successful operation",
"content": {
"application/json; charset=UTF-8": {
"schema": {
"$ref": "#/components/schemas/ResourceListModel"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"*/*": {
"schema": {
"type": "object"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"*/*": {
"schema": {
"type": "object"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"*/*": {
"schema": {
"type": "object"
}
}
}
},
"4XX": {
"description": "Client error",
"content": {
"application/json; charset=UTF-8": {
"schema": {
"$ref": "#/components/schemas/SpringErrorResponse"
}
}
}
}
}
},
"put": {
"tags": [
"ResourceLists"
],
"x-visibility": "internal",
"summary": "Update Resource List",
"description": "Updates the resource list that has the specified ID.",
"operationId": "update",
"parameters": [
{
"name": "id",
"in": "path",
"description": "ResourceList Id",
"required": true,
"schema": {
"type": "string"
}
}
],
"requestBody": {
"description": "Model for Resource List",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ResourceListModel"
},
"examples": {
"TAG": {
"description": "Tag ResourceList",
"value": {
"members": [
{
"string": "string"
}
],
"name": "string",
"resourceListType": "TAG",
"description": "string"
}
},
"RESOURCE_GROUP": {
"description": "RESOURCE_GROUP ResourceList",
"value": {
"description": "string",
"members": [
"string",
"string"
],
"name": "string",
"resourceListType": "RESOURCE_GROUP"
}
},
"COMPUTE_ACCESS_GROUP": {
"description": "COMPUTE_ACCESS_GROUP ResourceList",
"value": {
"description": "string",
"members": [
{
"appIDs": [
"*"
],
"clusters": [
"*"
],
"codeRepos": [
"*"
],
"containers": [
"*"
],
"functions": [
"*"
],
"hosts": [
"*"
],
"images": [
"*"
],
"labels": [
"*"
],
"namespaces": [
"*"
]
}
],
"name": "string",
"resourceListType": "COMPUTE_ACCESS_GROUP"
}
}
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful operation",
"content": {
"application/json; charset=UTF-8": {
"schema": {
"$ref": "#/components/schemas/ResourceListModel"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"*/*": {
"schema": {
"type": "object"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"*/*": {
"schema": {
"type": "object"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"*/*": {
"schema": {
"type": "object"
}
}
}
},
"4XX": {
"description": "Client error",
"content": {
"application/json; charset=UTF-8": {
"schema": {
"$ref": "#/components/schemas/SpringErrorResponse"
}
}
}
}
}
},
"delete": {
"tags": [
"ResourceLists"
],
"x-visibility": "internal",
"summary": "Delete Resource List",
"description": "Deletes the resource list that has the specified ID.",
"operationId": "delete",
"parameters": [
{
"name": "id",
"in": "path",
"description": "ResourceList Id",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"204": {
"description": "Successful operation"
},
"400": {
"description": "Bad Request",
"content": {
"*/*": {
"schema": {
"type": "object"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"*/*": {
"schema": {
"type": "object"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"*/*": {
"schema": {
"type": "object"
}
}
}
},
"4XX": {
"description": "Client error",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/SpringErrorResponse"
}
}
}
}
}
}
},
"/crane/v1/account_group/{id}": {
"get": {
"tags": [
"AccountGroups"
],
"x-visibility": "public",
"summary": "Get resource",
"description": "Returns something",
"operationId": "getById_1",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Account Group ID",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "includeAccountInfo",
"in": "query",
"description": "Include Cloud Account details",
"required": false,
"schema": {
"type": "boolean"
}
}
],
"responses": {
"200": {
"description": "Successful operation",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AccountGroupModel"
}
}
}
},
"400": {
"description": "Bad Request",
"content": {
"*/*": {
"schema": {
"type": "object"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"*/*": {
"schema": {
"type": "object"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"*/*": {
"schema": {
"type": "object"
}
}
}
},
"4XX": {
"description": "Client error",
"content": {
"application/json; charset=UTF-8": {
"schema": {
"$ref": "#/components/schemas/SpringErrorResponse"
}
}
}
}
},
},
"put": {
"tags": [
"AccountGroups"
],
"x-visibility": "internal",
"summary": "Update resource",
"description": "Update information",
"operationId": "update_1",
"parameters": [
{
"name": "id",
"in": "path",
"description": "AccountGroup Id",
"required": true,
"schema": {
"type": "string"
}
}
],
"requestBody": {
"content": {
"application/json; charset=UTF-8": {
"schema": {
"$ref": "#/components/schemas/AccountGroupModel"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Successful operation"
},
"400": {
"description": "Bad Request",
"content": {
"*/*": {
"schema": {
"type": "object"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"*/*": {
"schema": {
"type": "object"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"*/*": {
"schema": {
"type": "object"
}
}
}
},
"4XX": {
"description": "Client error",
"content": {
"application/json; charset=UTF-8": {
"schema": {
"$ref": "#/components/schemas/SpringErrorResponse"
}
}
}
}
}
},
"delete": {
"tags": [
"AccountGroups"
],
"x-visibility": "internal",
"summary": "Delete resource",
"description": "Deletes the resource",
"operationId": "delete_1",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Delete resource",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Successful operation"
},
"400": {
"description": "Bad Request",
"content": {
"*/*": {
"schema": {
"type": "object"
}
}
}
},
"403": {
"description": "Forbidden",
"content": {
"*/*": {
"schema": {
"type": "object"
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"*/*": {
"schema": {
"type": "object"
}
}
}
},
"4XX": {
"description": "Client error",
"content": {
"*/*": {
"schema": {
"$ref": "#/components/schemas/SpringErrorResponse"
}
}
}
}
}
}
}
}
}
2条答案
按热度按时间tkclm6bt1#
643ylb082#
使用
map_values
将函数应用于对象的所有值。您有两个嵌套对象,因此需要调用map_values
两次:要去除空路径,请仅选择那些不是空数组的值:
或者甚至可能是以下之一:
第一次