JSON转YAML

将JSON转换为YAML格式

加载示例

JSON输入

YAML输出

本地运行 · 粘贴密钥安全无忧
YAML将显示在这里…

什么是JSON转YAML转换?

JSON转YAML转换是将JavaScript Object Notation格式的数据转换为YAML Ain't Markup Language格式的过程。两种格式表示相同的数据结构(对象、数组、字符串、数字、布尔值、null),但语法不同。JSON依赖花括号、方括号和逗号,而YAML使用缩进和换行符,生成的输出更接近纯文本。与XML不同,这两种格式都不需要schema。

YAML被设计为对人友好的数据序列化格式,是Kubernetes清单、Docker Compose文件、Ansible playbook、GitHub Actions工作流及众多CI/CD系统的默认配置语言。当源数据为JSON而目标系统需要YAML时,你需要一个能够无损保留每个值、类型和嵌套层级的转换工具。

当你收到JSON格式的API响应或导出数据,需要将其粘贴到YAML配置文件时,在线JSON转YAML转换非常实用。转换对所有标准JSON类型都是无损的:字符串、数字、布尔值、null、数组和对象都可以直接映射到对应的YAML格式。包含冒号或特殊字符的值会自动加引号,确保输出的YAML有效。

为什么要将JSON转换为YAML?

YAML是配置文件的标准格式,而JSON是API返回数据的格式。在二者之间转换,让你无需手动改写数据,就能为每项任务选择合适的格式。

即时转换
粘贴JSON即可立即获得YAML输出。无需等待服务器处理,无需上传文件,也没有速率限制。
🔒
隐私优先处理
数据始终不离开你的浏览器。转换完全在你设备上的JavaScript中运行,凭据、令牌和API密钥始终保持私密。
🔀
支持任意JSON结构
深层嵌套对象、大型数组、混合类型、Unicode字符串和特殊字符均可正确转换。工具完整保留数据结构。
📋
无需账号或安装
打开页面即可开始转换。无需注册、无需扩展程序、无需安装CLI工具。在任何有浏览器的设备上均可使用。

JSON转YAML使用场景

Kubernetes与Docker Compose
API响应和导出的配置通常以JSON形式返回。将其转换为YAML,即可直接用于Kubernetes清单、Helm chart和Docker Compose文件。
CI/CD流水线配置
GitHub Actions、GitLab CI、CircleCI和Azure Pipelines均使用YAML。以编程方式从JSON生成流水线配置后,在提交前将输出转换为YAML。
Ansible Playbook
Ansible的playbook和inventory文件需要YAML格式。将云API导出的JSON inventory数据转换为Ansible所需的YAML格式。
API响应检查
REST API返回JSON。将嵌套响应转换为YAML,可以一目了然地查看数据层级,比充满括号的JSON更易于扫描。
配置文件迁移
将应用从基于JSON的配置(如tsconfig.json、package.json导出项)迁移到基于YAML的工具时,批量转换配置值,而无需逐一重新输入。
学习与文档
学生和技术写作者通过并排对比JSON与YAML,了解数据结构在不同格式间的映射关系。转换器提供即时、准确的示例。

JSON与YAML对比

JSON和YAML可以表示相同的数据,但其语法和功能在特定使用场景下存在重要差异。

特性JSONYAML
SyntaxCurly braces, square brackets, colons, commasIndentation-based, colons, dashes
ReadabilityModerate — nested brackets become denseHigh — visual hierarchy from indentation
CommentsNot allowed (RFC 8259)Supported with #
Multi-line stringsEscape sequences only (\n)Block scalars with | or >
Data typesstring, number, boolean, null, object, arraySame plus date, timestamp, binary
File sizeSlightly larger (brackets + quotes)Slightly smaller (no brackets)
Trailing commasNot allowedNot applicable (no commas)
SpecRFC 8259 / ECMA-404YAML 1.2 (yaml.org)

转换后的YAML注意事项

YAML有一些来自JSON背景的开发者容易忽视的解析规则。以下四个问题是使用转换输出时最常见的bug来源。

未加引号的yes/no会被解析为布尔值
YAML 1.1解析器将裸露的yes、no、on、off、true和false视为布尔值。如果你的JSON中有字符串值"yes"或"no",YAML输出可能会丢失引号,被旧版工具解析为布尔值。YAML 1.2将此限制为仅true/false。
缩进错误会导致解析失败
YAML使用缩进来定义结构。多一个或少一个空格都可能改变含义或产生解析错误。与JSON中错误逗号会给出明确报错不同,YAML缩进错误可能静默地改变数据层级。
值中的冒号需要加引号
冒号后跟空格(": ")是YAML的键值分隔符。如果你的JSON字符串包含该字符序列(如"http://example.com"),YAML输出必须对该值加引号。大多数转换器会自动处理这一情况。
多文档文件
YAML支持用---分隔的多文档文件,而JSON没有等价功能。将JSON配置数组转换时,每个元素可能成为独立的YAML文档,也可能保留为数组项。请了解目标工具期望哪种格式。

代码示例

在大多数编程语言中,以编程方式将JSON转换为YAML需要一个YAML序列化库。标准库负责JSON解析,YAML输出则需要额外的第三方包。

JavaScript (Node.js)
import YAML from 'js-yaml'

const json = '{"host":"localhost","port":3000,"debug":true}'
const obj = JSON.parse(json)
const yamlStr = YAML.dump(obj, { indent: 2 })
console.log(yamlStr)
// → host: localhost
// → port: 3000
// → debug: true
Python
import json, yaml

json_str = '{"host": "localhost", "port": 3000, "debug": true}'
data = json.loads(json_str)
yaml_str = yaml.dump(data, default_flow_style=False, sort_keys=False)
print(yaml_str)
# → host: localhost
# → port: 3000
# → debug: true
Go
package main

import (
    "encoding/json"
    "fmt"
    "gopkg.in/yaml.v3"
)

func main() {
    jsonStr := `{"host":"localhost","port":3000,"debug":true}`
    var data map[string]interface{}
    json.Unmarshal([]byte(jsonStr), &data)

    yamlBytes, _ := yaml.Marshal(data)
    fmt.Println(string(yamlBytes))
    // → debug: true
    // → host: localhost
    // → port: 3000
}
CLI (yq / jq + Python)
# Using yq (https://github.com/mikefarah/yq)
echo '{"host":"localhost","port":3000}' | yq -P
# → host: localhost
# → port: 3000

# Using Python one-liner
echo '{"host":"localhost","port":3000}' | python3 -c "import sys,json,yaml; print(yaml.dump(json.load(sys.stdin), default_flow_style=False))"

常见问题

JSON转YAML的转换是无损的吗?
是的,对于所有标准JSON类型均无损。字符串、数字、布尔值、null、数组和对象都有对应的YAML等价类型。转换后的YAML可以被解析还原为完全相同的数据。唯一的外观差异是格式:YAML使用缩进代替花括号。
YAML能表示JSON的所有内容吗?
可以。YAML是JSON的超集(自YAML 1.2起)。每个有效的JSON文档同时也是有效的YAML。YAML还额外支持JSON不具备的功能:注释、锚点/别名、多行字符串以及日期等额外标量类型。
Kubernetes和Docker为什么使用YAML而不是JSON?
YAML支持注释,这对记录基础设施配置至关重要。对于深层嵌套结构,YAML也因以缩进代替括号嵌套而更易阅读。Kubernetes实际上同时接受JSON和YAML,但社区和所有官方文档均使用YAML。
如何处理大型JSON文件?
该转换器在浏览器中运行,可处理数兆字节以内的文件而无任何问题。对于非常大的文件(50MB以上),请使用CLI工具如yq,或使用带有PyYAML库的Python脚本,这些工具以流式方式处理数据,占用更少内存。
转换器能保留键的顺序吗?
可以。转换器按照JSON输入中键的出现顺序输出YAML键。JSON对象在规范上是无序的,但实际上解析器会保留插入顺序,本工具在YAML输出中也维持该顺序。
输出遵循哪个YAML版本?
输出遵循YAML 1.2规范。这意味着只有true和false被视为布尔字面量(不包括yes/no/on/off)。可能被误解的字符串会自动加引号,以防止解析歧义。
将API密钥和令牌粘贴到此工具中安全吗?
安全。转换完全在你的浏览器中使用JavaScript运行,任何数据都不会传输到服务器。你可以打开浏览器的网络检查器,观察转换过程中不会发出任何请求,以此验证这一点。