JSON 转多个 YAML 文件的 Python 示例

JSON 转多个 YAML 文件的 Python 示例

代码示例

import json
import yaml

# 示例 JSON 数据
json_text = """
{
    "paths": {
        "/admin/system/index/info": {
            "get": {
                "tags": [
                    "用户登录接口"
                ],
                "summary": "info",
                "operationId": "infoUsingGET",
                "produces": [
                    "*/*"
                ],
                "parameters": [
                    {
                        "name": "token",
                        "in": "header",
                        "description": "用户token",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "originalRef": "Result",
                            "$ref": "#/definitions/Result"
                        }
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "403": {
                        "description": "Forbidden"
                    },
                    "404": {
                        "description": "Not Found"
                    }
                },
                "deprecated": false
            }
        },
        "/admin/system/index/login": {
            "post": {
                "tags": [
                    "用户登录接口"
                ],
                "summary": "login",
                "operationId": "loginUsingPOST_1",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "*/*"
                ],
                "parameters": [
                    {
                        "in": "body",
                        "name": "loginVo",
                        "description": "loginVo",
                        "required": true,
                        "schema": {
                            "originalRef": "LoginVo",
                            "$ref": "#/definitions/LoginVo"
                        }
                    },
                    {
                        "name": "token",
                        "in": "header",
                        "description": "用户token",
                        "required": false,
                        "type": "string"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "originalRef": "Result",
                            "$ref": "#/definitions/Result"
                        }
                    },
                    "201": {
                        "description": "Created"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "403": {
                        "description": "Forbidden"
                    },
                    "404": {
                        "description": "Not Found"
                    }
                },
                "deprecated": false
            }
        }
    }
}
"""


def json_to_yaml_demo(json_text):
    # 第一步:加载 JSON 数据
    json_data = json.loads(json_text)

    # 第二步:转成 YAML 数据结构列表
    yaml_data_list = []
    for path, methods in json_data.get('paths', {}).items():
        for method, details in methods.items():
            yaml_data = {
                "title": f"{details.get('summary', 'Unknown')} 接口",
                "base_url": "http://127.0.0.1:8880",
                "parameters": "title,username,password,assert_str: data/get_token.csv",
                "request": {
                    "method": method,
                    "headers": {
                        "Content-Type": "application/json" if "application/json" in details.get('consumes', []) else "*/*"
                    },
                    "cookies": {},
                    "url": path,
                    "json": '{"password":"admin","username":"admin"}'
                }
            }
            yaml_data_list.append(yaml_data)

    # 第三步:把列表中的数据转成一个个 YAML 文件
    for index, yaml_data in enumerate(yaml_data_list, start=1):
        yaml_file_name = f'output_{index}.yaml'
        with open(yaml_file_name, 'w', encoding='utf-8') as file:
            yaml.dump(yaml_data, file, allow_unicode=True, sort_keys=False)
        print(f"已保存 YAML 文件: {yaml_file_name}")


if __name__ == "__main__":
    json_to_yaml_demo(json_text)

代码解释

1. 导入必要的库

导入 json 库用于解析 JSON 数据,导入 yaml 库用于处理 YAML 数据。

2. 定义示例 JSON 数据

定义一个包含 API 路径和方法信息的 JSON 字符串 json_text

3. json_to_yaml_demo 函数

第一步:加载 JSON 数据

使用 json.loads() 函数将 JSON 字符串解析为 Python 字典 json_data

第二步:转成 YAML 数据结构列表

遍历 json_data 中的 paths 部分,为每个路径和方法构建一个 YAML 数据结构,并添加到 yaml_data_list 列表中。

第三步:把列表中的数据转成一个个 YAML 文件

遍历 yaml_data_list 列表,为每个 YAML 数据结构生成一个唯一的文件名,使用 yaml.dump() 函数将其保存为 YAML 文件。

4. 主程序

调用 json_to_yaml_demo 函数,传入示例 JSON 数据进行处理。

注意事项

  • 此示例中的 json 字段中的 "{"password":"admin","username":"admin"}" 是硬编码的,你可以根据实际需求进行修改。
  • 确保已经安装了 pyyaml 库,可以使用 pip install pyyaml 进行安装。

运行该代码后,会在当前目录下生成多个 YAML 文件,每个文件对应一个 API 路径和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值