编程进阶网 编程进阶网
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接

杨充

专注编程 · 终身学习者
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接
  • ScriptHub 脚本工具箱
  • Python

  • Shell-Bash

  • 工具脚本

    • 工具脚本速查
    • 哈希校验
    • Base64编码
    • AES加解密
    • RSA签名验签
    • JWT令牌
    • JSON与YAML
      • 一、Python JSON 操作
        • 1.1 基本读写
        • 1.2 美化输出
        • 1.3 JSON↔YAML 互转
        • 1.4 实战:JSON/YAML 互转 CLI 工具
      • 二、Shell 一行 JSON/YAML
    • XML与CSV
    • 编码转义
    • 图片转换
    • 文档转换
    • 批量重命名
    • 分割合并
    • 目录同步
    • 文件监控
    • 压缩归档
    • 文件去重
    • cURL速查
    • HTTP调试
    • 端口DNS
    • 抓包代理
  • ScriptHub
  • 工具脚本
杨充
2020-02-03
目录

JSON与YAML

# JSON与YAML

JSON 读写/美化/sort_keys、PyYAML 安全加载、JSON↔YAML 互转、CLI 一行格式化。

# 一、Python JSON 操作

# 1.1 基本读写

#!/usr/bin/env python3
import json

# ---- 字典 → JSON 字符串 ----
data = {"name": "Alice", "age": 30, "skills": ["Python", "Go"]}
json_str = json.dumps(data)
print(json_str)  # {"name":"Alice","age":30,"skills":["Python","Go"]}

# ---- JSON 字符串 → 字典 ----
loaded = json.loads('{"name":"Bob","age":25}')
print(loaded["name"])  # Bob

# ---- 文件读写 ----
with open('config.json', 'w') as f:
    json.dump(data, f, indent=2)       # 写入文件

with open('config.json') as f:
    config = json.load(f)              # 读取文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# 1.2 美化输出

#!/usr/bin/env python3
import json

data = {"name": "Alice", "items": [1, 2, 3], "nested": {"key": "value"}}

# 缩进 + 排序 key
print(json.dumps(data, indent=2, sort_keys=True, ensure_ascii=False))
# 输出:
# {
#   "items": [1, 2, 3],
#   "name": "Alice",
#   "nested": {"key": "value"}
# }

# 紧凑格式(节省带宽)
print(json.dumps(data, separators=(',', ':')))  # {"name":"Alice","items":[1,2,3]}

# 处理 datetime / Decimal 等非标准类型
from datetime import datetime
class CustomEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime):
            return obj.isoformat()
        return super().default(obj)

print(json.dumps({"time": datetime.now()}, cls=CustomEncoder))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# 1.3 JSON↔YAML 互转

pip install pyyaml
1
#!/usr/bin/env python3
import json, yaml

# ---- JSON → YAML ----
with open('config.json') as f:
    data = json.load(f)
with open('config.yaml', 'w') as f:
    yaml.dump(data, f, allow_unicode=True, default_flow_style=False)

# ---- YAML → JSON ----
with open('config.yaml') as f:
    data = yaml.safe_load(f)          # safe_load 防代码注入!
with open('config.json', 'w') as f:
    json.dump(data, f, indent=2)

# ⚠️ 不要用 yaml.load (不安全)——始终用 yaml.safe_load
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 1.4 实战:JSON/YAML 互转 CLI 工具

#!/usr/bin/env python3
"""json-yaml 互转命令行工具
用法: python convert.py data.json data.yaml       # JSON→YAML
      python convert.py data.yaml data.json       # YAML→JSON
"""
import sys, json, yaml

def convert(input_path, output_path):
    with open(input_path) as f:
        ext = input_path.rsplit('.', 1)[-1]
        data = yaml.safe_load(f) if ext in ('yaml', 'yml') else json.load(f)

    with open(output_path, 'w') as f:
        out_ext = output_path.rsplit('.', 1)[-1]
        if out_ext in ('yaml', 'yml'):
            yaml.dump(data, f, allow_unicode=True, default_flow_style=False)
        else:
            json.dump(data, f, indent=2, ensure_ascii=False)

    print(f"✅ {input_path} → {output_path}")

if __name__ == '__main__':
    convert(sys.argv[1], sys.argv[2])
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 二、Shell 一行 JSON/YAML

#!/bin/bash

# ===== JSON 格式化(python 内建)=====
echo '{"name":"Alice","age":30}' | python3 -m json.tool
# 输出美化 JSON

# ===== 用 jq 处理 JSON(需安装 brew/apt install jq)=====
echo '{"name":"Alice","age":30}' | jq .
cat data.json | jq '.name'               # 提取字段
cat data.json | jq '.items[]'            # 遍历数组
cat data.json | jq '.[] | select(.age > 25)'  # 条件过滤

# ===== YAML ↔ JSON(用 python)=====
python3 -c "import sys,json,yaml;json.dump(yaml.safe_load(sys.stdin),sys.stdout,indent=2)" < config.yaml
python3 -c "import sys,json,yaml;yaml.dump(json.load(sys.stdin),sys.stdout)" < config.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#工具#格式
上次更新: 2026/06/17, 12:47:39
JWT令牌
XML与CSV

← JWT令牌 XML与CSV→

最近更新
01
信号崩溃快速排查
06-15
02
CoreDump破案
06-15
03
perf火焰图实战
06-15
更多文章>
Theme by Vdoing | Copyright © 2019-2026 杨充 | MIT License | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式