正在加载,请稍候…

JSON 转 YAML:完整转换指南与示例

即时将 JSON 转换为 YAML。了解两者差异、何时使用每种格式以及常见陷阱。

JSON 转 YAML:完整转换指南与示例

为什么要在 JSON 和 YAML 之间转换?

JSON(JavaScript Object Notation)和 YAML(YAML Ain't Markup Language)表示相同类型的数据结构,但语法理念截然不同。了解何时以及如何在它们之间进行转换对于现代开发工作流程至关重要。

JSON 转 YAML:完整转换指南与示例插图

JSON:API 标准

JSON 专为机器间通信而设计。其语法严格、无歧义,并直接映射到 JavaScript 对象。

{
  "name": "John Doe",
  "age": 30,
  "active": true,
  "address": {
    "city": "New York",
    "country": "US"
  },
  "hobbies": ["reading", "coding"]
}

JSON 的优势包括:每种编程语言都普遍支持,严格的语法没有歧义,在 JavaScript 中可直接解析,以及压缩后体积小。

JSON 的缺点包括:不支持注释(对于配置文件来说是一个重大限制),以及所有键都需要引号,语法更冗长。

YAML:配置标准

YAML 使用缩进和最少的标点符号来表示相同的结构。它是 DevOps(Docker Compose、Kubernetes、GitHub Actions、Ansible)中配置文件的主要格式。

name: John Doe
age: 30
active: true
address:
  city: New York
  country: US
hobbies:
  - reading
  - coding

YAML 的优势包括:支持使用 # 字符注释,嵌套结构更易读,自然的多行字符串,更少的标点符号,以及支持引用和锚点以实现 DRY 配置。

YAML 的缺点包括:对缩进敏感(制表符非法),隐式类型转换导致错误,多种有效表示形式,以及解析速度较慢。

并排比较

特性 JSON YAML
注释 是(# 注释)
尾随逗号 不允许 不适用
多行字符串 需要 \n 转义 自然块样式
锚点/引用 是(&anchor, *ref)
主要用途 API、数据交换 配置文件
文件扩展名 .json .yaml 或 .yml

JSON 转 YAML:完整转换指南与示例插图

常见 YAML 陷阱

类型转换

YAML 会自动将未加引号的值转换为其自然类型:

port: 8080       # 整数,不是字符串!
enabled: yes     # 布尔值 true,不是字符串!
version: 1.0     # 浮点数!
zip: 01234       # 整数(丢弃前导零)!

要强制为字符串,请加引号:port: "8080"zip: "01234"

挪威问题

在 YAML 1.1 中,国家代码 NO、ON、OFF、YES、NO 被解析为布尔值。YAML 1.2 已修复此问题。

JSON 转 YAML:完整转换指南与示例插图

制表符非法

YAML 严格要求使用空格进行缩进。制表符会导致解析错误。

YAML 锚点和别名

YAML 支持使用锚点(&)和别名(*)实现 DRY 原则:

defaults: &defaults
  database: postgres
  pool: 10
  timeout: 30

development:
  <<: *defaults
  database: sqlite

production:
  <<: *defaults
  pool: 20

YAML 中的多行字符串

# 字面量块(|)- 保留换行符
description: |
  First line
  Second line

# 折叠块(>)- 将换行符转换为空格
description: >
  This long sentence will
  be joined as one line.

JSON 转 YAML 转换规则

JSON YAML
{} 对象 带缩进的键值对
[] 数组 以 - 开头的项目
"string" 不加引号(或根据需要加引号)
123 数字 123
true/false true/false
null null 或 ~

-> 试试 JSON 转 YAML 转换器