Python JSON转YAML:告别手改配置文件的痛苦

JSON, YAML, 转换, 一键脚本, 小白工具

故事开场:一把瑞士军刀救了我

想象这样一个场景:
你刚拿到一个超酷的在线服务,官方却只给了一份冗长的 JSON 配置。你想改几行,却被大括号、引号、逗号整得头晕眼花。
这时,你掏出“瑞士军刀”——一个只有 40 行的小脚本 json2yaml.py。双击后,JSON 秒变 YAML,缩进和注释都整整齐齐,你只需像改作文一样改几行,再一键转回 JSON。整个过程不到 10 秒,从此告别手动改配置的痛苦。


代码解析

功能块 1:检查“有没有文件”

就像进门前先看门牌号,脚本第一步是确认你有没有把文件拖进来。

import sys
if len(sys.argv) > 1:
    # 有文件
else:
    print("Usage: json2yaml.py <source_file.json> [target_file.yaml]")

如果忘记给文件名,脚本会礼貌地提醒你:“嘿,带上 JSON 文件再来找我!”


功能块 2:把 JSON 读进来

找到文件后,脚本像拆快递一样把 JSON 打开,把里面的数据倒进内存。

import json, os
if os.path.exists(sys.argv[1]):
    with open(sys.argv[1], "r") as f:
        data = json.load(f)

with 的好处是:用完自动关门,不怕你忘记关文件。


功能块 3:一键变 YAML

这一步就像把乐高按说明书重新拼成另一种风格。

import yaml
output = yaml.dump(data)

yaml.dump 会把 Python 字典直接变成人类友好的 YAML。


功能块 4:决定写到哪里

脚本很贴心:

  • 没给第二个文件名?直接打印到屏幕,你可以复制粘贴。
  • 给了文件名?先检查文件是否已存在,防止覆盖。
if len(sys.argv) < 3:
    print(output)
elif os.path.exists(sys.argv[2]):
    print("ERROR: 文件已存在")
else:
    with open(sys.argv[2], "w") as f:
        f.write(output)

就像把信投到邮箱,投完后还会告诉你“投递成功”。


如果还想更厉害

扩展点子 1:加个“漂亮缩进”参数

YAML 默认缩进 2 格,但有人偏爱 4 格。加一行就能自定义:

# 运行:python json2yaml.py in.json out.yaml --indent 4
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--indent", type=int, default=2)
args = parser.parse_args()
output = yaml.dump(data, default_flow_style=False, indent=args.indent)

扩展点子 2:批量处理整个文件夹

把文件夹里所有 .json 一次性转 .yaml

import glob
for json_path in glob.glob("*.json"):
    yaml_path = json_path.replace(".json", ".yaml")
    with open(json_path) as jf, open(yaml_path, "w") as yf:
        yf.write(yaml.dump(json.load(jf)))

一行命令 python json2yaml.py --batch 就能搞定,省时省力。


总结

这个 40 行的小脚本就像瑞士军刀里最常用的那把主刀:简单、锋利、随手就能解决 JSON 与 YAML 互转的日常烦恼。无论你是改游戏配置、调 CI 文件,还是帮同事整理接口文档,只要记住一条命令,就能把复杂机器码一样的 JSON 变成人类易读的 YAML。现在,你已经知道了它怎么拆、怎么改、怎么扩,下一步就是打开终端,亲手试试!

源码获取

完整代码已开源,包含详细的注释文档:
🔗 [GitCode仓库] https://gitcode.com/laonong-1024/python-automation-scripts
📥 [备用下载] https://pan.quark.cn/s/654cf649e5a6 提取码:f5VG

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐