JSON / YAML 转换/ JSON ↔ YAML
JSON 与 YAML 双向实时转换,一键切换格式,支持自定义 JSON 缩进。
JSON
YAML
这个工具有帮到你吗?
代码示例
JavaScript (js-yaml)
// npm install js-yaml
import yaml from 'js-yaml';
// JSON → YAML
const obj = { name: 'Alice', scores: [100, 95] };
const yamlStr = yaml.dump(obj, { indent: 2 });
// name: Alice
// scores:
// - 100
// - 95
// YAML → JSON
const yamlInput = `
name: Alice
scores:
- 100
- 95
`;
const parsed = yaml.load(yamlInput);
JSON.stringify(parsed, null, 2);
// { "name": "Alice", "scores": [100, 95] }Python (PyYAML)
# pip install pyyaml
import yaml, json
# JSON → YAML
data = {"name": "Alice", "scores": [100, 95]}
yaml_str = yaml.dump(data, default_flow_style=False,
allow_unicode=True, indent=2)
# name: Alice
// scores:
// - 100
// - 95
# YAML → JSON
with open('config.yaml') as f:
data = yaml.safe_load(f) # use safe_load!
json_str = json.dumps(data, indent=2, ensure_ascii=False)
# Stream large files
for doc in yaml.safe_load_all(open('multi.yaml')):
print(json.dumps(doc))Go
// go get gopkg.in/yaml.v3
import (
"encoding/json"
"gopkg.in/yaml.v3"
)
// YAML → JSON
yamlStr := []byte("name: Alice\nage: 30")
var data map[string]interface{}
yaml.Unmarshal(yamlStr, &data)
jsonBytes, _ := json.MarshalIndent(data, "", " ")
// JSON → YAML
jsonStr := []byte(`{"name":"Alice","age":30}`)
var obj interface{}
json.Unmarshal(jsonStr, &obj)
yamlBytes, _ := yaml.Marshal(obj)
// age: 30
// name: AliceCLI Tools
# yq: YAML/JSON Swiss Army knife
# brew install yq / apt install yq
# YAML → JSON
yq -o=json config.yaml
# JSON → YAML
yq -P config.json
# In-place conversion
yq -i -o=yaml config.json
# Python one-liner: JSON → YAML
python3 -c "
import sys, json, yaml
print(yaml.dump(json.load(sys.stdin),
default_flow_style=False, allow_unicode=True))
" < config.json常见问题
YAML 和 JSON 有什么关系?
YAML 是 JSON 的超集——合法的 JSON 也是合法的 YAML。YAML 在 JSON 的基础上增加了:注释(#)、多行字符串(| 和 >)、锚点和引用(& 和 *)、更灵活的日期/时间类型、裸字符串(不需要引号)。YAML 更适合配置文件(可读性更好),JSON 更适合数据交换(解析更快、无歧义)。
什么情况下应该用 YAML 而不是 JSON?
选择 YAML 的场景:需要注释(如 CI/CD 配置、Docker Compose、Kubernetes manifest)、配置文件需要人工编辑和维护、内容包含多行文本(YAML 的 | 块样式比 \n 更易读)。选择 JSON 的场景:API 数据交换(解析速度更快)、需要严格的类型系统。
YAML 的缩进有什么规则?
YAML 使用空格缩进(禁止使用 Tab)表示层级关系,缩进必须一致,通常用 2 或 4 个空格。同一层级的所有键必须有相同的缩进量。YAML 对缩进错误非常敏感。
YAML 的多行字符串怎么写?
YAML 有两种多行字符串:竖线块(|)保留换行符,如 bio: | 下一行是内容。折叠块(>)将换行替换为空格(连续空行保留为换行)。此外还有单引号(不处理转义)和双引号(处理转义)两种流式风格。
如何在 Node.js 中解析 YAML?
推荐使用 js-yaml 库(npm install js-yaml):const yaml = require('js-yaml'); const obj = yaml.load(yamlString); const str = yaml.dump(obj);。注意:yaml.load 默认允许执行 JavaScript,应使用 yaml.safeLoad 限制类型。
转换时常见的兼容性问题有哪些?
1)YAML 中的注释(#)无法转为 JSON;2)YAML 的锚点(&)和引用(*)在转为 JSON 时会展开为完整对象;3)YAML 的日期类型会被解析为 Date 对象;4)YAML 的整数会被解析为数字,超大整数可能有精度问题。