我需要从提供的yaml或json文件中解析一些值。以下是我的yaml文件中的内容,
swagger: '2.0'
info:
description: >-
This is a sample server Petstore server. You can find out more about
Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net,
#swagger](http://swagger.io/irc/). For this sample, you can use the api
key `special-key` to test the authorization filters.
version: 1.0.0
title: Swagger Petstore
termsOfService: 'http://swagger.io/terms/'
contact:
email: apiteam@swagger.io
license:
name: Apache 2.0
url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
host: petstore.swagger.io
basePath: /v2
tags:
- name: pet
description: Everything about your Pets
externalDocs:
description: Find out more
url: 'http://swagger.io'
- name: store
description: Access to Petstore orders
- name: user
description: Operations about user
externalDocs:
description: Find out more about our store
url: 'http://swagger.io'
schemes:
- https
- http
paths:
/pet:
post:
tags:
- pet
summary: Add a new pet to the store
description: ''
operationId: addPet
consumes:
- application/json
- application/xml
produces:
- application/xml
- application/json
parameters:
- in: body
name: body
description: Pet object that needs to be added to the store
required: true
schema:
$ref: '#/definitions/Pet'
responses:
'405':
description: Invalid input
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
put:
tags:
- pet
summary: Update an existing pet
description: ''
operationId: updatePet
consumes:
- application/json
- application/xml
produces:
- application/xml
- application/json
parameters:
- in: body
name: body
description: Pet object that needs to be added to the store
required: true
schema:
$ref: '#/definitions/Pet'
responses:
'400':
description: Invalid ID supplied
'404':
description: Pet not found
'405':
description: Validation exception
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
/pet/findByStatus:
get:
tags:
- pet
summary: Finds Pets by status
description: Multiple status values can be provided with comma separated strings
operationId: findPetsByStatus
produces:
- application/xml
- application/json
parameters:
- name: status
in: query
description: Status values that need to be considered for filter
required: true
type: array
items:
type: string
enum:
- available
- pending
- sold
default: available
collectionFormat: multi
responses:
'200':
description: successful operation
schema:
type: array
items:
$ref: '#/definitions/Pet'
'400':
description: Invalid status value
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
/pet/findByTags:
get:
tags:
- pet
summary: Finds Pets by tags
description: >-
Muliple tags can be provided with comma separated strings. Use
tag1, tag2, tag3 for testing.
operationId: findPetsByTags
produces:
- application/xml
- application/json
parameters:
- name: tags
in: query
description: Tags to filter by
required: true
type: array
items:
type: string
collectionFormat: multi
responses:
'200':
description: successful operation
schema:
type: array
items:
$ref: '#/definitions/Pet'
'400':
description: Invalid tag value
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
deprecated: true
'/pet/{petId}':
get:
tags:
- pet
summary: Find pet by ID
description: Returns a single pet
operationId: getPetById
produces:
- application/xml
- application/json
parameters:
- name: petId
in: path
description: ID of pet to return
required: true
type: integer
format: int64
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/Pet'
'400':
description: Invalid ID supplied
'404':
description: Pet not found
security:
- api_key: []
post:
tags:
- pet
summary: Updates a pet in the store with form data
description: ''
operationId: updatePetWithForm
consumes:
- application/x-www-form-urlencoded
produces:
- application/xml
- application/json
parameters:
- name: petId
in: path
description: ID of pet that needs to be updated
required: true
type: integer
format: int64
- name: name
in: formData
description: Updated name of the pet
required: false
type: string
- name: status
in: formData
description: Updated status of the pet
required: false
type: string
responses:
'405':
description: Invalid input
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
delete:
tags:
- pet
summary: Deletes a pet
description: ''
operationId: deletePet
produces:
- application/xml
- application/json
parameters:
- name: api_key
in: header
required: false
type: string
- name: petId
in: path
description: Pet id to delete
required: true
type: integer
format: int64
responses:
'400':
description: Invalid ID supplied
'404':
description: Pet not found
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
'/pet/{petId}/uploadImage':
post:
tags:
- pet
summary: uploads an image
description: ''
operationId: uploadFile
consumes:
- multipart/form-data
produces:
- application/json
parameters:
- name: petId
in: path
description: ID of pet to update
required: true
type: integer
format: int64
- name: additionalMetadata
in: formData
description: Additional data to pass to server
required: false
type: string
- name: file
in: formData
description: file to upload
required: false
type: file
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/ApiResponse'
security:
- petstore_auth:
- 'write:pets'
- 'read:pets'
/store/inventory:
get:
tags:
- store
summary: Returns pet inventories by status
description: Returns a map of status codes to quantities
operationId: getInventory
produces:
- application/json
parameters: []
responses:
'200':
description: successful operation
schema:
type: object
additionalProperties:
type: integer
format: int32
security:
- api_key: []
/store/order:
post:
tags:
- store
summary: Place an order for a pet
description: ''
operationId: placeOrder
produces:
- application/xml
- application/json
parameters:
- in: body
name: body
description: order placed for purchasing the pet
required: true
schema:
$ref: '#/definitions/Order'
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/Order'
'400':
description: Invalid Order
'/store/order/{orderId}':
get:
tags:
- store
summary: Find purchase order by ID
description: >-
For valid response try integer IDs with value >= 1 and <= 10.
Other values will generated exceptions
operationId: getOrderById
produces:
- application/xml
- application/json
parameters:
- name: orderId
in: path
description: ID of pet that needs to be fetched
required: true
type: integer
maximum: 10
minimum: 1
format: int64
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/Order'
'400':
description: Invalid ID supplied
'404':
description: Order not found
delete:
tags:
- store
summary: Delete purchase order by ID
description: >-
For valid response try integer IDs with positive integer value.
Negative or non-integer values will generate API errors
operationId: deleteOrder
produces:
- application/xml
- application/json
parameters:
- name: orderId
in: path
description: ID of the order that needs to be deleted
required: true
type: integer
minimum: 1
format: int64
responses:
'400':
description: Invalid ID supplied
'404':
description: Order not found
/user:
post:
tags:
- user
summary: Create user
description: This can only be done by the logged in user.
operationId: createUser
produces:
- application/xml
- application/json
parameters:
- in: body
name: body
description: Created user object
required: true
schema:
$ref: '#/definitions/User'
responses:
default:
description: successful operation
/user/createWithArray:
post:
tags:
- user
summary: Creates list of users with given input array
description: ''
operationId: createUsersWithArrayInput
produces:
- application/xml
- application/json
parameters:
- in: body
name: body
description: List of user object
required: true
schema:
type: array
items:
$ref: '#/definitions/User'
responses:
default:
description: successful operation
/user/createWithList:
post:
tags:
- user
summary: Creates list of users with given input array
description: ''
operationId: createUsersWithListInput
produces:
- application/xml
- application/json
parameters:
- in: body
name: body
description: List of user object
required: true
schema:
type: array
items:
$ref: '#/definitions/User'
responses:
default:
description: successful operation
/user/login:
get:
tags:
- user
summary: Logs user into the system
description: ''
operationId: loginUser
produces:
- application/xml
- application/json
parameters:
- name: username
in: query
description: The user name for login
required: true
type: string
- name: password
in: query
description: The password for login in clear text
required: true
type: string
responses:
'200':
description: successful operation
schema:
type: string
headers:
X-Rate-Limit:
type: integer
format: int32
description: calls per hour allowed by the user
X-Expires-After:
type: string
format: date-time
description: date in UTC when token expires
'400':
description: Invalid username/password supplied
/user/logout:
get:
tags:
- user
summary: Logs out current logged in user session
description: ''
operationId: logoutUser
produces:
- application/xml
- application/json
parameters: []
responses:
default:
description: successful operation
'/user/{username}':
get:
tags:
- user
summary: Get user by user name
description: ''
operationId: getUserByName
produces:
- application/xml
- application/json
parameters:
- name: username
in: path
description: 'The name that needs to be fetched. Use user1 for testing. '
required: true
type: string
responses:
'200':
description: successful operation
schema:
$ref: '#/definitions/User'
'400':
description: Invalid username supplied
'404':
description: User not found
put:
tags:
- user
summary: Updated user
description: This can only be done by the logged in user.
operationId: updateUser
produces:
- application/xml
- application/json
parameters:
- name: username
in: path
description: name that need to be updated
required: true
type: string
- in: body
name: body
description: Updated user object
required: true
schema:
$ref: '#/definitions/User'
responses:
'400':
description: Invalid user supplied
'404':
description: User not found
delete:
tags:
- user
summary: Delete user
description: This can only be done by the logged in user.
operationId: deleteUser
produces:
- application/xml
- application/json
parameters:
- name: username
in: path
description: The name that needs to be deleted
required: true
type: string
responses:
'400':
description: Invalid username supplied
'404':
description: User not found
securityDefinitions:
petstore_auth:
type: oauth2
authorizationUrl: 'http://petstore.swagger.io/oauth/dialog'
flow: implicit
scopes:
'write:pets': modify pets in your account
'read:pets': read your pets
api_key:
type: apiKey
name: api_key
in: header
definitions:
Order:
type: object
properties:
id:
type: integer
format: int64
petId:
type: integer
format: int64
quantity:
type: integer
format: int32
shipDate:
type: string
format: date-time
status:
type: string
description: Order Status
enum:
- placed
- approved
- delivered
complete:
type: boolean
default: false
xml:
name: Order
Category:
type: object
properties:
id:
type: integer
format: int64
name:
type: string
xml:
name: Category
User:
type: object
properties:
id:
type: integer
format: int64
username:
type: string
firstName:
type: string
lastName:
type: string
email:
type: string
password:
type: string
phone:
type: string
userStatus:
type: integer
format: int32
description: User Status
xml:
name: User
Tag:
type: object
properties:
id:
type: integer
format: int64
name:
type: string
xml:
name: Tag
Pet:
type: object
required:
- name
- photoUrls
properties:
id:
type: integer
format: int64
category:
$ref: '#/definitions/Category'
name:
type: string
example: doggie
photoUrls:
type: array
xml:
name: photoUrl
wrapped: true
items:
type: string
tags:
type: array
xml:
name: tag
wrapped: true
items:
$ref: '#/definitions/Tag'
status:
type: string
description: pet status in the store
enum:
- available
- pending
- sold
xml:
name: Pet
ApiResponse:
type: object
properties:
code:
type: integer
format: int32
type:
type: string
message:
type: string
externalDocs:
description: Find out more about Swagger
url: 'http://swagger.io'
我编写了以下代码来提取所有API端点(/ pets,/ pets / {petID},...)和API类型(GET,PUT,POST等。)。
import yaml
import json
with open("swagger.yaml", 'r') as yaml_in, open("examplepets.json", "w") as json_out:
yaml_object = yaml.safe_load(yaml_in) # yaml_object will be a list or a dict - Converts the
json.dump(yaml_object, json_out, indent=2)
with open("examplepets.json", "r") as reading:
data = json.load(reading)
for path, values in data['paths'].items():
print(path.replace('{', '${')) # If required used print statement
for value in values:
print(value) # If required use print statement
我需要进一步详细说明代码,以便从swagger文件中获取以下值,键“ consumes”,“ produces”下的Values: 在“参数:”下,我需要获取键的值->“名称”,“中”,“必需”,“类型”以下键列出的键下的值应与相应的API端点API一起提取并打印方法类型 “消费:”,“产生:” “参数:”我需要获取键的值->“名称”,“中”,“必需”,“类型”
注意:我已经介绍了获取API端点和API方法类型的代码。
答案 0 :(得分:1)
尝试一下
import yaml
import json
with open("./test.yaml", 'r') as yaml_in, open("yml_test.json", "w") as json_out:
data = json.loads(json.dumps(yaml.load(yaml_in, Loader=yaml.FullLoader)))
output_dict = {}
for url in data["paths"]:
for method in data["paths"][url]:
output_dict[url + "/" + method] = {}
output_dict[url + "/" + method]["parameters"] = {}
if "consumes" in data["paths"][url][method]:
output_dict[url+"/"+method]["consumes"] = data["paths"][url][method]["consumes"]
if "produces" in data["paths"][url][method]:
output_dict[url+"/"+method]["produces"] = data["paths"][url][method]["produces"]
if data["paths"][url][method]["parameters"]:
if "in" in data["paths"][url][method]["parameters"][0]:
output_dict[url+"/"+method]["parameters"]["in"] = data["paths"][url][method]["parameters"][0]["in"]
if "name" in data["paths"][url][method]["parameters"][0]:
output_dict[url+"/"+method]["parameters"]["name"] = data["paths"][url][method]["parameters"][0]["name"]
if "required" in data["paths"][url][method]["parameters"][0]:
output_dict[url+"/"+method]["parameters"]["required"] = data["paths"][url][method]["parameters"][0]["required"]
if "type" in data["paths"][url][method]["parameters"][0]:
output_dict[url+"/"+method]["parameters"]["type"] = data["paths"][url][method]["parameters"][0]["type"]
json.dump(output_dict, json_out)
输出如下所示,并将其保存到yml_test.json
文件中。
{'/pet/post': {'parameters': {'in': 'body', 'name': 'body', 'required': True}, 'consumes': ['application/json', 'application/xml'], 'produces': ['application/xml', 'application/json']}, '/pet/put': {'parameters': {'in': 'body', 'name': 'body', 'required': True}, 'consumes': ['application/json', 'application/xml'], 'produces': ['application/xml', 'application/json']}, '/pet/findByStatus/get': {'parameters': {'in': 'query', 'name': 'status', 'required': True, 'type': 'array'}, 'produces': ['application/xml', 'application/json']}, '/pet/findByTags/get': {'parameters': {'in': 'query', 'name': 'tags', 'required': True, 'type': 'array'}, 'produces': ['application/xml', 'application/json']}, '/pet/{petId}/get': {'parameters': {'in': 'path', 'name': 'petId', 'required': True, 'type': 'integer'}, 'produces': ['application/xml', 'application/json']}, '/pet/{petId}/post': {'parameters': {'in': 'path', 'name': 'petId', 'required': True, 'type': 'integer'}, 'consumes': ['application/x-www-form-urlencoded'], 'produces': ['application/xml', 'application/json']}, '/pet/{petId}/delete': {'parameters': {'in': 'header', 'name': 'api_key', 'required': False, 'type': 'string'}, 'produces': ['application/xml', 'application/json']}, '/pet/{petId}/uploadImage/post': {'parameters': {'in': 'path', 'name': 'petId', 'required': True, 'type': 'integer'}, 'consumes': ['multipart/form-data'], 'produces': ['application/json']}, '/store/inventory/get': {'parameters': {}, 'produces': ['application/json']}, '/store/order/post': {'parameters': {'in': 'body', 'name': 'body', 'required': True}, 'produces': ['application/xml', 'application/json']}, '/store/order/{orderId}/get': {'parameters': {'in': 'path', 'name': 'orderId', 'required': True, 'type': 'integer'}, 'produces': ['application/xml', 'application/json']}, '/store/order/{orderId}/delete': {'parameters': {'in': 'path', 'name': 'orderId', 'required': True, 'type': 'integer'}, 'produces': ['application/xml', 'application/json']}, '/user/post': {'parameters': {'in': 'body', 'name': 'body', 'required': True}, 'produces': ['application/xml', 'application/json']}, '/user/createWithArray/post': {'parameters': {'in': 'body', 'name': 'body', 'required': True}, 'produces': ['application/xml', 'application/json']}, '/user/createWithList/post': {'parameters': {'in': 'body', 'name': 'body', 'required': True}, 'produces': ['application/xml', 'application/json']}, '/user/login/get': {'parameters': {'in': 'query', 'name': 'username', 'required': True, 'type': 'string'}, 'produces': ['application/xml', 'application/json']}, '/user/logout/get': {'parameters': {}, 'produces': ['application/xml', 'application/json']}, '/user/{username}/get': {'parameters': {'in': 'path', 'name': 'username', 'required': True, 'type': 'string'}, 'produces': ['application/xml', 'application/json']}, '/user/{username}/put': {'parameters': {'in': 'path', 'name': 'username', 'required': True, 'type': 'string'}, 'produces': ['application/xml', 'application/json']}, '/user/{username}/delete': {'parameters': {'in': 'path', 'name': 'username', 'required': True, 'type': 'string'}, 'produces': ['application/xml', 'application/json']}}