什么是 JSON 和 YAML
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,使用大括号和中括号表示结构。
YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化格式,使用缩进表示结构。
对比示例
JSON:
{
"server": {
"host": "0.0.0.0",
"port": 3000,
"features": ["auth", "logging"]
}
}
YAML:
server:
host: 0.0.0.0
port: 3000
features:
- auth
- logging
JSON vs YAML 对比
| 特性 | JSON | YAML |
|------|------|------|
| 可读性 | 中等 | 高(缩进结构) |
| 注释 | ❌ 不支持 | ✅ # 注释 |
| 文件大小 | 较大 | 较小 |
| 解析速度 | 快 | 较慢 |
| 数据类型 | 基本类型 | 丰富(日期、引用等) |
| 生态系统 | Web 标准 | DevOps 首选 |
| 安全性 | ✅ 无代码执行风险 | ⚠️ 有代码执行风险 |
为什么需要 JSON/YAML 转换
- Docker Compose:YAML 配置 ↔ JSON 程序化生成
- Kubernetes:YAML 清单 ↔ JSON API 请求
- CI/CD:GitHub Actions YAML ↔ JSON schema 验证
- 配置管理:不同工具使用不同格式
- API 文档:OpenAPI 规范支持 JSON 和 YAML
- 数据交换:不同系统间的数据格式转换
安全注意事项
⚠️ YAML 的安全风险:YAML 支持 !!js/function 等标签,可能导致代码执行。解析不可信的 YAML 数据时,务必禁用代码执行功能。
# 危险:YAML 可能执行代码
!!js/function |
function() { return process.env.SECRET; }
如何使用在线工具
使用 DevToolkit Pro 的 JSON/YAML 转换器:
- 粘贴 JSON 或 YAML 数据
- 工具自动检测格式并转换
- 支持自定义缩进和格式选项
- 实时显示转换结果
- 语法错误检测
代码中的转换
JavaScript
const yaml = require('yaml');
const fs = require('fs');
// JSON → YAML
const jsonData = { server: { host: '0.0.0.0', port: 3000 } };
const yamlString = yaml.stringify(jsonData);
console.log(yamlString);
// YAML → JSON
const yamlString = 'server:\n host: 0.0.0.0\n port: 3000';
const jsonObj = yaml.parse(yamlString);
console.log(jsonObj);
Python
import json
import yaml
# JSON → YAML
data = {"server": {"host": "0.0.0.0", "port": 3000}}
yaml_str = yaml.dump(data, default_flow_style=False)
# YAML → JSON
yaml_str = "server:\n host: 0.0.0.0\n port: 3000"
data = yaml.safe_load(yaml_str) # 注意使用 safe_load
json_str = json.dumps(data, indent=2)
各工具的配置格式偏好
| 工具 | 首选格式 | 文件扩展名 |
|------|---------|-----------|
| Docker Compose | YAML | docker-compose.yml |
| Kubernetes | YAML | *.yaml |
| GitHub Actions | YAML | .github/workflows/*.yml |
| package.json | JSON | package.json |
| tsconfig.json | JSON | tsconfig.json |
| Nginx | 自定义 | nginx.conf |
| GitLab CI | YAML | .gitlab-ci.yml |
FAQ
JSON 和 YAML 哪个更好?
没有绝对的好坏。JSON 适合 Web API 和机器处理。YAML 适合人类编辑和配置文件。大多数现代工具两者都支持。
YAML 转 JSON 会丢失信息吗?
基本不会。但 YAML 的某些特性 JSON 不支持:注释、锚点(&/*)、多文档(---)。转换时这些内容会被忽略。
如何选择缩进大小?
YAML 标准推荐 2 个空格缩进。Kubernetes 社区也使用 2 空格。Docker Compose 默认 2 空格。保持项目内一致即可。
本文由 DevToolkit Pro 提供。更多开发者工具请访问 首页。
相关文章
YAML JSON 转换完全指南:原理、工具与最佳实践
深入理解 YAML 和 JSON 的区别与联系,掌握 YAML JSON 双向转换的各种方法——在线工具、命令行、代码实现,以及常见陷阱和最佳实践。
在线 XML/JSON 转换器:数据格式互转工具
学习如何在 XML 和 JSON 格式之间转换数据。了解 XML 和 JSON 的特点差异,以及在 API 集成、配置管理和数据交换中的应用场景。
在线 Markdown 预览器:实时渲染和编辑 Markdown 文档
学习如何使用在线 Markdown 预览器实时渲染 Markdown 文档。了解 Markdown 语法、GFM 扩展、表格和代码高亮,以及在技术文档中的最佳实践。