我需要解析和存储json或yaml文件中的值列表

时间:2019-07-11 04:30:41

标签: python json python-3.x yaml jsonparser

我需要从提供的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方法类型的代码。

1 个答案:

答案 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']}}