JSON 转 YAML/XML
选好“从”和“到”的格式,粘贴内容,点“转换”。支持 JSON、YAML、XML、CSV 两两互转,并会如实提示转换中哪些信息会丢失。内容只在你的浏览器里处理,不会上传。
使用限制
- YAML 按 1.2 核心规则解析:
yes、no、on、off是普通字符串,不是布尔值(YAML 1.1 的老解析器会当成布尔);日期时间保持为文字;支持锚点、别名和<<合并键(展开成重复内容);只处理单个文档,不支持用---分隔的多文档。 - XML 不会加载任何外部资源:纯 JavaScript 解析,不联网;含
<!ENTITY声明(包括外部实体和自定义实体)的文档会被直接拒绝,防止外部实体注入(XXE)和实体膨胀攻击;普通的<!DOCTYPE>会被忽略。XML 声明、处理指令、注释会丢失,CDATA 会变成普通文字。 - XML 里没有数字和布尔类型,所以 XML 转 JSON 时值默认都是字符串;JSON 转 XML 时,数字和布尔变成文字,null 变成空元素。只出现一次的元素不会变成数组。数组里直接套数组无法用 XML 表示。
- CSV 只有字符串:转成 JSON 后值默认都是字符串;JSON 转 CSV 时,嵌套的对象和数组会写成 JSON 文字放进单元格,null 变成空单元格。行里的列数比表头多会报错,比表头少则补空。
- 超过 JavaScript 能精确表示的数字(整数超过 9007199254740991 或有效数字超过 15 位)在转换后会变成近似值,请改用字符串。
- YAML 展开后超过 200 万个节点(例如“别名炸弹”)会被拒绝。
使用方法
- 在“从”和“转成”里选择格式,把内容粘贴到输入框。
- 点“转换”。第一次转换到 YAML 或 XML 时才会加载对应的解析库(约 14KB 与 26KB),之后不会再加载。
- 结果下方会列出这次转换可能丢失或改变的信息,请逐条看一眼。
- XML 的约定:属性变成以
@开头的键(id="1"对应"@id"),元素里的文字在同时有属性或子元素时放在"#text",重复出现的元素变成数组;反过来 JSON 转 XML 时遵循同样的约定。 - CSV 的约定:第一行是表头,每一行对应 JSON 数组里的一个对象;JSON 转 CSV 需要“对象组成的数组”。
常见问题
YAML 里的 yes / no 会变成 true / false 吗?
不会。本工具按 YAML 1.2 处理,yes 就是字符串 "yes"。但把含 yes 的 JSON 转成 YAML 后交给 YAML 1.1 解析器(例如旧版 PyYAML)时可能被当成布尔值,页面会提示。
XML 转 JSON 后属性去哪了?
属性变成以 @ 开头的键,例如 <a id="1">x</a> 转成 {"a":{"@id":"1","#text":"x"}}。
为什么要拒绝 XML 里的实体声明?
外部实体可以让解析器去读取本地文件或访问网络(XXE 攻击),自定义实体可以被嵌套成“实体膨胀”耗尽内存。本工具运行在你自己的浏览器里,本来也不会去加载外部资源,但仍选择直接拒绝,更稳妥。
我的数据会被上传吗?
不会,转换全部在你的浏览器里完成。