如何在不编写任何代码的情况下将 JSON 转换为 YAML(以及反向转换)

发布: (2026年5月3日 GMT+8 09:30)
7 分钟阅读
原文: Dev.to

Source: Dev.to

请提供您希望翻译的完整文本内容,我会在保持原有格式、Markdown 语法和技术术语不变的前提下,将其翻译成简体中文。

为什么 JSON 和 YAML 总是冲突

JSON 和 YAML 表示相同的数据模型——键值对、数组、嵌套对象——但它们的表达方式不同。JSON 使用大括号和方括号;YAML 使用缩进和短横线。这使它们在结构上兼容,却在视觉上不兼容。

冲突最常出现在以下实际场景:

  • API 响应 → Kubernetes 清单。 你从 API(JSON)获取配置数据,需要将其嵌入 ConfigMap 或 Secret(YAML)中。
  • GitHub Actions / CI 流水线。 工作流文件是 YAML,但工具配置(ESLint、Prettier、TypeScript)通常是 JSON。
  • Helm Chart 值。 默认值是 YAML;你的模板逻辑可能会生成 JSON 与之并存。
  • Ansible 剧本。 在 JSON 中定义的变量需要流入 YAML 剧本任务。

转换是机械的——但仍然繁琐

以下是相同数据在两种格式下的展示:

JSON

{
  "server": {
    "host": "api.example.com",
    "port": 8080,
    "tls": true
  },
  "retries": 3,
  "tags": ["production", "us-east-1"]
}

YAML 等价写法

server:
  host: api.example.com
  port: 8080
  tls: true
retries: 3
tags:
  - production
  - us-east-1

请注意这些变化:没有大括号,普通字符串不需要引号,数组变成了以短横线开头的列表,整个结构依赖于一致的缩进。只要有一个空格写错,YAML 解析器就会报错。

反向转换同样是机械的——但手动转换仍然容易出错,尤其是面对深度嵌套的对象时。

Converting in the Browser: The Fast Path

Instead of writing conversion code every time, the JSON to YAML Converter handles this in your browser. Paste your JSON on the left, get clean YAML on the right. No sign‑up, nothing leaves your browser.

在转换之前,请确保你的 JSON 是有效的。压缩的 API 响应或从日志中复制的 JSON 常常隐藏问题——尾随逗号、未转义字符,或使用单引号而不是双引号。先使用 JSON Beautifier & Validator 进行格式化和校验,一步完成,这样就不会把有问题的 JSON 输入转换器,导致输出异常而不知所因。

实际案例:Kubernetes ConfigMap

假设你有以下从部署流水线输出的 JSON 配置:

{
  "database": {
    "host": "postgres.internal",
    "port": 5432,
    "name": "app_production",
    "ssl_mode": "require"
  },
  "cache": {
    "ttl": 300,
    "max_size": 1000
  },
  "feature_flags": {
    "new_checkout": true,
    "beta_search": false
  }
}

转换后,你得到可以直接放入 Kubernetes ConfigMap 的 YAML:

database:
  host: postgres.internal
  port: 5432
  name: app_production
  ssl_mode: require
cache:
  ttl: 300
  max_size: 1000
feature_flags:
  new_checkout: true
  beta_search: false

简洁、缩进良好,随时可嵌入。工具负责结构映射——你只需确认输出是否合理。

反向转换:YAML 转回 JSON

反向转换同样重要。你的 GitHub Actions 工作流文件是 YAML;但你需要在期待 JSON 的脚本中解析特定值。或者同事给你发送了一个 Ansible vars 文件,而你的测试工具只能处理 JSON。

同一个 JSON to YAML Converter 支持双向转换——在 YAML 面板粘贴 YAML,即可得到 JSON。

在进行 YAML → JSON 转换时需要注意的一点是:YAML 原生支持时间戳、多行字符串(|> 块)以及锚点/别名(&*)。这些在 JSON 中没有直接对应的形式,因此会被序列化为普通字符串或在行内解析。如果你的 YAML 大量使用了这些特性,请在下游使用之前仔细检查生成的 JSON 输出。

何时在代码中编写转换

对于一次性的配置微调,浏览器工具是最快的路径。但如果你在构建流水线或自动化脚本中进行转换,就需要使用代码。以下是几种常见语言的惯用示例:

Python

import json
import yaml

with open("config.json") as f:
    data = json.load(f)

with open("config.yaml", "w") as f:
    yaml.dump(data, f, default_flow_style=False)

Node.js (with js-yaml)

const fs = require('fs');
const yaml = require('js-yaml');

const data = JSON.parse(fs.readFileSync('config.json', 'utf8'));
fs.writeFileSync('config.yaml', yaml.dump(data));

对于交互式探索或调试——尤其是当你不确定转换后的文件为何显示异常时——即使已有自动化,浏览器工具仍是最快的反馈循环。

进一步阅读

如果你想了解 JSON 和 YAML 的差异 …

超越语法 — 数据类型处理、注释支持、模式严格性 — JSON vs YAML comparison 页面深入探讨了这两种格式在结构上的权衡。

您最常遇到哪种格式不匹配?

我很好奇——是 API → 配置文件 的方向最让您头疼,还是 YAML → JSON(用于测试或脚本)在您的工作流中更是痛点?请在下方留下评论。

本文使用的免费工具

0 浏览
Back to Blog

相关文章

阅读更多 »

Claude 运行快速。Codex 发布。

摘要:我给 Claude 和 Codex 两个大型编码任务。- Claude 大约在一小时内完成。- Codex 大约用了八小时。乍一看,这看起来像是……