JSON 转换器
粘贴 JSON 对象或数组,就可以把它转换成适合配置文件的 YAML、适合旧系统对接的 XML、适合表格软件处理的 CSV、适合配置文档的 TOML、适合 fixture 的 JavaScript 对象语法,或 return [...] 形式的 PHP 文件。每种输出格式都有自己的选项,比如分隔符、引用符、根元素名、属性模式、缩进宽度、键名排序等,方便你直接交给下一个工具使用,不必再做第二轮清理。转换、语法高亮和复制都在当前浏览器标签页内完成。
- 支持 6 种目标格式:YAML、XML、CSV、TOML、JavaScript 对象字面量,以及 PHP 的 return [...] 数组文件
- 提供格式专属选项:CSV 的分隔符 / 引用符 / 表头 / 扁平化 / 数组展开,XML 的根元素 / 子元素名 / 声明 / 属性模式,YAML 的缩进和键名排序,TOML 的键名排序
- 实时校验 JSON;如果输入不是严格 JSON,会给出更容易理解的提示
- 使用 Shiki 提供语法高亮预览,支持一键复制结果,也支持全屏查看较大的 payload
- 完全本地转换,不上传、不做遥测。适合处理 API 响应、内部配置、fixture 和种子数据
功能简介
JSON 很适合数据传输,但真正落地时,下游经常需要另一种格式:配置文件、表格数据、fixture、旧系统接口。这里把开发中最常用的 6 种转换目标集中在一个工具里。
- 01
JSON → YAML
生成适合 Helm Chart、GitHub Actions、Docker Compose、OpenAPI 规范、CI 流水线等场景的 YAML。你可以调整缩进宽度、按键名排序以稳定 diff,也可以在需要时显式给字符串加引号。
- 02
JSON → XML
生成适合合作方接口、RSS feed、SOAP 服务和文档工作流的 XML。可以设置根元素名和子元素名,启用 pretty print,加入 <?xml ?> 声明,也可以把 @id 这类键输出为属性。
- 03
JSON → CSV
把对象数组转换成可在 Excel、Google Sheets、BigQuery、DuckDB 中打开的 CSV。支持把嵌套键展开成点号路径列,选择逗号 / 分号 / 制表符 / 竖线分隔符,切换双引号 / 单引号,设置数组处理方式和空单元格表现。
- 04
JSON → TOML
为 Rust、Hugo、Cargo、Poetry 等偏好 TOML 配置的工具生成 TOML。TOML 要求根节点是对象;如果输入不符合条件,工具会给出明确错误,而不是生成不合法的结果。
- 05
JSON → JS 对象
输出 JavaScript 对象字面量语法。它保留双引号键名和适合 JS 阅读的缩进,适合 fixture、Storybook stories、代码审查片段,以及不要求严格 JSON 的 inline mock。
- 06
JSON → PHP 数组
生成完整的 <?php return [...]; 文件,适合直接放入 Laravel 配置、WordPress 示例、Symfony fixture,或任何更偏好 PHP 数组语法而不是原始 JSON include 的项目。
- 07
实时 JSON 校验
输入时会持续重新解析。绿色状态表示 JSON 有效,红色状态会提示括号、逗号或引号相关问题。这样可以先排除输入语法问题,再判断转换结果是否符合预期。
- 08
带语法高亮的预览
使用 Shiki 按输出语言进行高亮,覆盖 YAML、XML、CSV、TOML、JavaScript 和 PHP。缺少闭合标签、缩进异常等结构问题会更容易被看出来。
如何使用
基本流程只有 4 步。你调整目标格式或选项时,结果会实时重新计算。
- 01
把有效的 JSON 对象、数组、基本值或 null 粘贴到左侧输入区域。
- 02
从工作区底部的分段控件中选择目标格式:YAML、XML、CSV、TOML、JS 对象或 PHP 数组。
- 03
根据所选格式调整专属选项,例如 CSV 的分隔符和扁平化,XML 的根元素 / 子元素名,YAML 的缩进和排序,TOML 的键名排序。
- 04
查看右侧带语法高亮的结果。点击复制结果,即可把内容粘贴到配置文件、表格软件、fixture 或下游服务中。
功能说明
每种输出格式都有适合自己的场景。选择格式时,不要只看哪一种最短,而要看数据接下来会被谁使用、在哪里使用。
- CI 流水线、Helm values、OpenAPI 规范、Docker Compose、Ansible playbook、文档示例等需要人阅读的配置,通常适合用 YAML。
- 当合作方接口、SOAP 服务、RSS feed、旧 ERP 等仍然要求 element-based 标记语言时,使用 XML。
- 需要导入表格软件、BigQuery / DuckDB / Pandas 做临时分析、BI 工具前处理,或交给非工程同事查看时,CSV 更合适。
- Rust、Cargo、Poetry、Hugo 等现代配置文件,如果需要对象根节点和 typed key,通常适合用 TOML。
- JavaScript fixture、Storybook stories、MDX 文档里的代码片段、inline mock、PR 评论示例,适合使用 JS 对象。
- Laravel 配置、WordPress 示例、Symfony fixture,或喜欢 return [...] 数组的 PHP 项目,适合使用 PHP 数组。
- 如果目标只是让另一个开发者在工单里读懂这份数据,YAML 或格式化后的 JSON 往往比其他格式更清楚。
适合哪些场景
这个转换器是为反复出现的转换任务准备的。同样是粘贴 → 选择格式 → 调整选项 → 复制,可以服务不同的下游工作流。
-
API 响应 → 表格共享
把分页 JSON 响应转换成带表头、键名已扁平化的 CSV,让 PM、分析师或 QA 不写脚本也能在 Excel 或 Google Sheets 中打开。
-
JSON 配置 → YAML 迁移
当 CI、Kubernetes、OpenAPI 等下游工具更偏好 YAML 时,可以把项目设置、Feature Flag、服务配置从 JSON 迁移到 YAML。
-
JSON → Rust / Hugo / Poetry 使用的 TOML
把 JSON 对象作为 source of truth,生成 Cargo.toml、pyproject.toml 或 Hugo 配置块,并直接粘贴到目标工具中。
-
旧系统 XML 对接
在对接 SOAP 服务、计费系统、SIS、合作方 API 等仍然要求带属性的元素式标记语言时,可以把 JSON payload 转换成 XML。
-
生成 PHP fixture / Laravel 配置
从 API 响应或示例数据生成 <?php return [...]; 文件,直接用于 Laravel 配置、Symfony fixture、WordPress 示例,不必手动转义引号。
-
Storybook / MDX 文档 fixture
把 JSON 示例转换成 JavaScript 对象字面量,用于 inline mock、Storybook args、MDX 代码块或 PR 评论示例。适合不需要严格 JSON 的场景。
-
BigQuery / DuckDB / Pandas 前处理
把嵌套 JSON 扁平化成宽表 CSV 行,方便导入 BigQuery、DuckDB 或 Pandas DataFrame,用于临时分析或 BI 工具中转。
-
OpenAPI / JSON Schema 文档示例
从 JSON fixture 生成 API 文档里的 YAML 或 XML 示例,避免手写多份格式导致样例内容不一致。
-
确定输出格式前的比较
用同一份输入在 YAML、XML、CSV、TOML、JS 对象、PHP 数组之间切换,比较哪种格式最自然地表达这份数据。
-
Webhook payload → 更易读的 postmortem
把捕获到的 Stripe / GitHub / Slack Webhook payload 转成 YAML,避免在 incident 文档里出现横向很长的一行 JSON。
延伸阅读
如果输入来自压缩 API 响应或日志片段,建议先使用 JSON 格式化 查看语法错误和嵌套结构,再进行转换。如果目标是表格工作流,并且还想进一步整理结果,可以把 CSV 交给 CSV 工具 ,继续检查分隔符、预览表格、重命名列、排序、筛选,并导出 CSV / TSV / JSON / Markdown。如果你想看清转换前后或不同环境之间的 JSON 差异,可以打开 JSON 差异对比 ,并排查看 git 风格 diff,并按 JSON Path 列出每一处结构化变更。反过来,如果手上的源是一段 YAML,例如 Kubernetes manifest、GitHub Actions、OpenAPI 描述,可以打开 YAML 转换器 ,它会把 YAML 转成 JSON、TOML、XML、JS 对象或 PHP 数组,多文档与 anchor 默认展开,并检测 Norway 问题、版本号截断等常见陷阱。如果只想转换 JSON 里的某个子树,或先用 jq 过滤出目标数组,可以先到 JSONPath 与 jq 查询 提取需要的部分,再回到转换器选择目标格式。
使用建议
JSON 越大、目标格式越严格,下面这些习惯越能让转换结果稳定、可预期。
- 先校验并格式化 JSON。如果来源是压缩的 API 响应、一行日志,或从 JS 控制台复制来的字符串,建议先过一遍 JSON 格式化工具再转换。
- CSV 最适合结构一致的对象数组。结构混杂的对象会产生很宽的列集合;如果可以,先把数据规整成单一结构。
- 如果希望把嵌套字段变成 user.email、address.city、metadata.region 这样的点号列名,请启用扁平化嵌套对象。
- 只有当数组固定位置有意义时,才启用展开数组,例如 tags.0、tags.1。如果数组长度不固定,把整个数组字符串化到一个单元格里通常更好处理。
- XML 中请选择与目标 API 或 schema 一致的根元素名和子元素名。以数字开头或包含空格的键名会被转换成合法 XML 名称。
- 转换 TOML 时,请确保 JSON 根节点是对象。根数组或基本值在这个转换器里,也在 TOML 语义里,都不是合法的完整文档。
- 比较两份 YAML / TOML 输出时,启用键名排序。稳定顺序能让 diff 反映真实变化,而不是键顺序的波动。
- 把 JS 对象或 PHP 数组结果粘贴进项目之前,请检查字符串中的引号、反斜杠和 HTML 标签等特殊内容。
边界与注意事项
JSON 能表达的结构,不一定都能自然映射到每一种目标格式。先了解边界,可以减少为什么转换成这样的困惑。
- CSV 本质上是表格格式。嵌套对象和数组必须被扁平化、字符串化,或展开成带索引的列;部分层级信息一定会丢失,或被编码成字符串。
- 如果 JSON 键包含空格、标点,或 XML 元素名开头不能使用的字符,XML 元素名会被转换成安全名称。例如 "first name" 会变成 first_name。
- XML 属性模式只会把以 @ 开头的键,或 _attr 下的键,提升为元素属性。其他键仍会作为子元素输出。
- TOML 转换只接受对象作为根节点。如果 JSON 数组、基本值或 null 位于根部,会被拒绝。TOML 文件是键值文档,不是裸值格式。
- YAML 输出是实用的起点。但生产 YAML 可能仍需要手动补充注释、anchor 或多行块语法。建议把这里的结果当作良好的初稿,而不是最终文件。
- JS 对象输出会出于安全和一致性保留双引号键名。它是 JavaScript 语法,不是严格 JSON;不要再把它交给 JSON 解析器。
- PHP 数组输出会生成以 <?php 开头、包含 return [...]; 的完整文件。包含反斜杠或单引号的字符串,在提交到真实项目之前建议再检查一遍。
- 超过数 MB 的大 JSON 输入,可能会让浏览器内转换或语法高亮变慢。遇到这种情况,建议先用代表性片段验证选项,再处理完整数据。
常见问题
这里整理了关于格式、选项、隐私、校验,以及不同输出目标如何取舍的实用问题。
可以转换成哪些格式?
支持 6 种目标格式:YAML、XML、CSV、TOML、JavaScript 对象字面量,以及 <?php return [...]; 形式的 PHP 数组文件。每种格式都有自己的选项,例如分隔符、缩进、根元素名、键名排序等。
我的 JSON 会上传到哪里吗?
不会。解析、转换、语法高亮和复制都在当前浏览器标签页内完成,payload 不会发送到服务器。生产响应、内部配置、包含 PII 的示例数据都可以本地处理。
CSV 的扁平化嵌套对象是什么意思?
启用后,嵌套键会用点号连接成单独列名。比如 { "user": { "city": "Tokyo" } } 会生成 user.city 列。关闭时,嵌套对象会作为 JSON 字符串放进一个单元格。
CSV 的展开数组是什么意思?
启用后,数组元素会展开成带索引的列。例如 tags: ["a", "b"] 会变成 tags.0 和 tags.1 两列。关闭时,整个数组会字符串化到一个单元格里,从而整体保留结构。
XML 输出可以自定义吗?
可以。你可以设置根元素名(默认 root)、子元素名(默认 item)、是否 pretty print、是否输出 <?xml version=...?> 声明,以及是否启用把 @ 开头键转成属性的属性模式。
为什么 TOML 转换要求根节点是对象?
TOML 文档本质上是键值表。根级数组、基本值或 null 都没有自然的 TOML 表达方式。因此工具会明确报错,而不是生成不合法的 TOML。
JS 对象输出是有效 JSON 吗?
不是。JS 对象输出是 JavaScript 对象字面量语法,适合 fixture、Storybook stories、inline mock 和代码片段。如果需要严格 JSON,请使用原始 JSON。
PHP 数组输出是完整 PHP 文件吗?
是的。输出以 <?php 开头,并包含 return [...];,可以在 Laravel 配置、Symfony fixture、WordPress 示例中通过 require 使用。实际放入项目前建议快速检查一次。
YAML 的键名排序会改变数据吗?
不会,只会改变 YAML 输出中键的顺序。比较多次转换结果时启用它,可以让 diff 更聚焦实际内容差异,而不是顺序波动。
JSON5、JSONC、NDJSON 可以作为输入吗?
输入解析器使用严格 JSON(RFC 8259)。JSON5 / JSONC(注释、尾随逗号、单引号等)请先通过 JSON 格式化工具的尝试修复处理。NDJSON 需要按行拆开后逐条转换。
为什么 XML 元素名和 JSON 键不一样?
XML 元素名不能以数字开头,也不能包含空格和许多标点。违反这些规则的键会被转换成安全名称,例如 "first name" 会变成 first_name,"2items" 会变成 _2items,这样生成的 XML 才是有效的。
很大的 JSON 也能处理吗?
日常 API 响应和配置文件,几百 KB 到几 MB 通常都能顺畅转换。几十 MB 的 JSON 会拖慢浏览器;非常大的输入建议先用代表性片段验证选项,再处理完整文件。
更多相关工具
可以继续在数据工具集合里完成 JSON 工作流:校验源 payload、调整转换后的 CSV,或再进行一次格式转换。