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 路径和方法。