正在加载,请稍候…

JSON 转 YAML 转换器:何时以及为何使用 YAML

将 JSON 转换为 YAML 并了解两者差异。学习在配置文件中何时 YAML 比 JSON 更优。

JSON 转 YAML 转换器:何时以及为何使用 YAML

JSON 和 YAML:结构化数据的两种面孔

JSON 和 YAML 都表示相同类型的结构化数据——对象(映射)、数组(列表)、字符串、数字、布尔值和空值——但语法截然不同。理解何时使用每种格式以及如何在它们之间进行转换,是开发者和 DevOps 专业人员的关键技能。

JSON 转 YAML 转换器:何时以及为何使用 YAML 插图

YAML 相对于 JSON 的优势

人类可读性

YAML 使用基于空格的结构,而不是花括号和方括号:

JSON:

{
  "server": {
    "host": "localhost",
    "port": 8080
  },
  "features": ["auth", "logging", "cache"]
}

YAML:

server:
  host: localhost
  port: 8080
features:
  - auth
  - logging
  - cache

YAML 版本的特殊字符更少,读起来更像普通英语。

注释

YAML 支持使用 # 的注释,这对于配置文件至关重要:

# 数据库连接设置
database:
  host: localhost  # 生产环境时更改
  port: 5432
  # 连接池最大连接数
  pool_size: 10

JSON 不支持注释。

JSON 转 YAML 转换器:何时以及为何使用 YAML 插图

多行字符串

YAML 具有优雅的多行字符串语法:

# 字面量块(保留换行符)
message: |
  Hello, World!
  这是一条多行消息。
  
# 折叠块(将换行符折叠为空格)
description: >
  这个长描述将被
  合并为一行。

JSON 相对于 YAML 的优势

  • 通用解析器支持:每种语言都内置或轻松获得 JSON 解析器
  • 无缩进错误:花括号/方括号是显式的——缩进无关紧要
  • 更简单的规范:JSON 规范只有一页;YAML 规范有 80 页
  • 无类型歧义:不易出现意外的类型强制转换
  • 更适合 API:原生 JavaScript/Web 格式
  • 确定性:没有锚点、别名或合并键来混淆简单的解析器

YAML 类型强制转换陷阱

YAML 的自动类型推断可能导致细微的错误:

# 这些在 YAML 中不是字符串:
country: NO      # 解析为布尔值 false
version: 1.0     # 解析为浮点数
enabled: true    # 布尔值
octal: 0755      # 在 YAML 1.1 中解析为八进制整数

始终将您打算作为字符串的值用引号括起来:

country: "NO"
version: "1.0"

JSON 转 YAML 转换器:何时以及为何使用 YAML 插图

将 JSON 转换为 YAML

对于大多数数据,转换很简单:

  • JSON 对象变为 YAML 映射
  • JSON 数组变为 YAML 序列
  • JSON 字符串变为 YAML 标量(如果简单,通常不带引号)
  • JSON 数字和布尔值保持不变
  • Null 变为 ~null

YAML 功能无 JSON 对应项

锚点和别名:

defaults: &defaults
  timeout: 30
  retries: 3

production:
  <<: *defaults
  host: prod.example.com

转换为 JSON 时,锚点会被解析,值会被内联。

合并键:

base: &base
  key: value

extended:
  <<: *base
  extra: more

JSON 转 YAML 的常见用例

  • 将 API 响应转换为 Kubernetes 清单
  • 将 JSON 配置转换为 docker-compose.yml
  • 从 JSON 数据创建 Ansible playbook
  • 将 OpenAPI/Swagger 规范转换为更易读的 YAML
  • 从程序化 JSON 生成 Helm chart values

实际示例:Kubernetes 部署

JSON(由工具生成):

{
  "apiVersion": "apps/v1",
  "kind": "Deployment",
  "metadata": {"name": "my-app"},
  "spec": {
    "replicas": 3,
    "selector": {"matchLabels": {"app": "my-app"}},
    "template": {
      "metadata": {"labels": {"app": "my-app"}},
      "spec": {
        "containers": [{"name": "app", "image": "my-app:latest", "ports": [{"containerPort": 8080}]}]
      }
    }
  }
}

YAML(人工维护):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: app
          image: my-app:latest
          ports:
            - containerPort: 8080

YAML 格式是人工维护的 Kubernetes 清单的标准格式。

使用 JSON 转 YAML 转换器

我们的工具:

  1. 粘贴 JSON 数据——接受任何有效的 JSON
  2. 即时 YAML 输出——实时转换
  3. 格式保留——维护数据结构和类型
  4. 复制 YAML——一键复制,立即使用
  5. 往返验证——验证 YAML 转换回等效的 JSON

用于配置文件转换、API 文档格式化以及将基于 JSON 的工具与基于 YAML 的基础设施集成。