Skip to content
data2026-07-252 分钟阅读

什么是 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 转换

  1. Docker Compose:YAML 配置 ↔ JSON 程序化生成
  2. Kubernetes:YAML 清单 ↔ JSON API 请求
  3. CI/CD:GitHub Actions YAML ↔ JSON schema 验证
  4. 配置管理:不同工具使用不同格式
  5. API 文档:OpenAPI 规范支持 JSON 和 YAML
  6. 数据交换:不同系统间的数据格式转换

安全注意事项

⚠️ YAML 的安全风险:YAML 支持 !!js/function 等标签,可能导致代码执行。解析不可信的 YAML 数据时,务必禁用代码执行功能。

# 危险:YAML 可能执行代码
!!js/function |
  function() { return process.env.SECRET; }

如何使用在线工具

使用 DevToolkit Pro 的 JSON/YAML 转换器

  1. 粘贴 JSON 或 YAML 数据
  2. 工具自动检测格式并转换
  3. 支持自定义缩进和格式选项
  4. 实时显示转换结果
  5. 语法错误检测

代码中的转换

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 提供。更多开发者工具请访问 首页


ad