1 选方向
缩进 制表符只对 JSON 提供。YAML 是按空格定义的,制表符在它里面不是合法缩进。
给每个对象的键排序 按键读起来的样子排,而不是按它们的码位,所以 item2 排在 item10 前面。
2 贴进来
3 把结果带走
# YAML 转 JSON — JSON 也能转回 YAML
两个方向都有,而且会告诉你各自的代价。这些都不会粘进别人的服务器。
> 在浏览器中将支持的 YAML 1.2 子集转换为 JSON,也可将 JSON 转回 YAML。拒绝锚点、别名、标签和多文档流;JSON 会丢失注释。不会上传内容。
这是一个浏览器交互工具,地址是 https://abox.tools/zh/yaml-to-json/。文件在运行该浏览器的设备上处理。主动分享和可选联网功能都在页面上说明。下文是它的文字说明;使用工具请打开该地址。
## 你的 YAML 和 JSON **在浏览器里处理**,无须上传处理。
转换是对一段字符串做算术,就在这里,在这个页面上。两个解析器都是手写的,都在 `src/` 里——`shared/parse-yaml.js` 和 `shared/parse-json.js`——除此之外再没有别的。这个工具压根就没有网络功能,没有要取的,也没有要发的。这一点在这里比本站几乎任何地方都更要紧:一份 YAML 文件多半是部署配置,而部署配置多半塞满了主机名、桶名和密钥。
- ✗ 不上传
- ✗ 不注册
- ✗ 无大小限制
- ✓ 断网可用
- ✓ 开源
## 不上传就把 YAML 转成 JSON 的步骤
1. **选方向。** *YAML 转 JSON* 或者 *JSON 转 YAML*。菜单下面那行小字会在你粘任何东西之前,而不是之后,告诉你这个方向会丢什么。
2. **粘进来,或者把文件放上去。** 能选中能复制的都行。把文件放到选择框上,你自己的浏览器会读它并填进输入框——这里没有上传这一步可以省略——而 `.json` 或 `.yaml` 的后缀顺便就把方向定好了。
3. **选缩进。** 两个空格、四个空格,或者一个制表符。制表符只对 JSON 提供:YAML 是按空格定义的,制表符在它里面不是合法缩进。
4. **在出错的地方读错误。** 在这里失败的解析器会告诉你它遇到了什么,在第几行第几列,而不是“位置 4193 处有意外的 token”。通常这就够你修好一份配置文件,不用再打开别的东西。
5. **把结果拿走。** 复制,或者下载成文件,文件名按它出来的格式取。
## 说得更细的版本
[如何互转 YAML 与 JSON](https://abox.tools/zh/guides/convert-yaml-and-json/): 在浏览器中将支持的 YAML 子集转为 JSON,也可将 JSON 转为 YAML。复用前检查注释丢失、未支持的结构和精确数字文本。
## 工具箱里还有
- [XML 格式化](https://abox.tools/zh/xml-formatter/): 排开了好读的 XML,压平了好发的 XML,还有两个方向的 JSON 转换。这些都不会粘进别人的服务器。
- [文本比对](https://abox.tools/zh/text-diff/): 两段文本进来,每处差异都被标出来,逐行、逐词。没有一个字被贴进别人的服务器。
- [Base64 编码解码](https://abox.tools/zh/base64/): Base64、百分号编码、HTML 实体、十六进制和反斜杠转义,双向都行。没有一个字被贴进别人的服务器。
- [文本与文件分享](https://abox.tools/zh/share-text/): 分享只活在这个打开的标签页里。读的人从你的浏览器直接取走加密内容,关掉标签页就结束——任何服务器上都不留一点东西。
## 常见问题
### 我的 YAML 会被上传到什么地方吗?
不会。这个页面上的两个解析器和两个打印器,都是在你自己的浏览器里、你自己的硬件上跑的函数。这个工具压根就没有网络功能,从不取任何东西,也从不发任何东西,页面的 `Content-Security-Policy` 里写着它允许联系的每一个地址,没有一个属于本站。这正是拿它处理部署配置的理由:那种文件里塞满主机名、桶名,偶尔还有某人打算挪走的密钥,把它粘进别人的转换器,就是把它给了对方。
### 把 YAML 转成 JSON 会丢什么?
JSON 会丢失注释。本解析器有意只支持 YAML 1.2 的子集,拒绝锚点、别名和标签,而不是替你决定展开方式或类型转换。JSON 表示值的树状结构;YAML 还可表示共享节点和带类型的值。多文档流也会被拒绝,不会擅自包进数组。JSON 转 YAML 保留所表示的值。[YAML 规范](https://yaml.org/spec/1.2.2/)定义了更完整的格式。
### 我的 YAML 里写的是 no,JSON 出来却是字符串。为什么?
YAML 1.1 将 `yes`、`no`、`on` 和 `off` 当作布尔值,导致挪威国家代码变成 `false`。本工具支持的子集使用 YAML 1.2 规则:这些词保留为字符串,`true` 和 `false` 是布尔值,`null` 和 `~` 是 null,数字标量是数字。YAML 输出会为歧义词加引号,以兼容仍使用旧规则的读取器。
### 它会保持我的键顺序吗?
会,两个方向都会,而这比听上去难。建立在 `JSON.parse` 上的转换器会悄悄把看着像整数的键挪到前面,于是 `{"10":a,"2":b}` 回来就成了 `{"2":b,"10":a}`。数字保留你打的每一位,所以一个二十位的账号不会因为双精度浮点丢掉最后三位。如果你*就是想*排序,有个勾选框,而且它按键读起来的样子排,不是按码位。
### 能一次转换好几份 YAML 文档吗?
不能,而且它会直说,而不是替你挑一份。带 `---` 分隔符的文件装着不止一份文档,而 JSON 没有哪种形状表示“好几份文档”——用数组的话,就成了这份文件从没做过的断言。一份一份转。
### 这里为什么没有 YAML 格式化?
因为 YAML 没有值得一写的压缩形式——短的那种是流式风格,读不了,而读不了正是把文件留成 YAML 这件事的反面。排开 JSON、XML、HTML 和 CSS 是 [JSON 格式化](https://abox.tools/zh/json-formatter/)的活儿,而且它也排 YAML。
### 文件最大能有多大?
这里没有设限,因为没有服务器在为此付钱。真正的上限是你自己的设备:几兆字节的 YAML 没问题,文档很长的时候,页面会等你打字停下来再转换,而不是跟你抢键盘。
### 免费吗?需要注册吗?
免费,没有账号,不用登录,没有试用期,也不限制你粘多少。本站有广告,站点靠它维持;广告拿不到关于你文本的任何东西。
### 断网还能用吗?
能。页面加载一次之后拔掉网线,它照样工作。这也是证明没有上传的最简单办法:一个把你的配置送出去转换的工具,在你拔线的那一刻就停了。
## 这条隐私承诺怎么核实
- **处理在这个浏览器里完成。** 本工具在浏览器里处理输入和结果,处理代码不把它们上传去处理。Content-Security-Policy 限制可用资源和连接目的地,但已允许的主机仍可接收请求。策略不检查载荷,不能单独证明什么都没有发出。请把具体操作的请求与源码核对,或断网完成该本地操作。
- **这里不会去取任何东西。** `src/` 里哪儿都没有 `fetch`,没有 `XMLHttpRequest`,也没有 `sendBeacon`。两个解析器和两个打印器都是这个页面里的函数:进去一段字符串,出来一段字符串。
- **支持的子集使用 YAML 1.2 标量规则。** 在 YAML 1.1 里,`no` 是个布尔值,这就是那个著名的坑:挪威的国家代码会变成 `false`。这里读的是 1.2,在那里它就是它看上去的那个字符串。反过来的时候,这些词会*带引号*写回去,因为下一个打开这份文件的东西可能还是个 1.1 的读取器。`tests/js/text-convert.test.js` 两头都查。
- **没法诚实的转换,宁可停下来。** JSON 会丢失注释。本解析器有意只支持 YAML 1.2 的子集,拒绝锚点、别名和标签,而不是替你决定展开方式或类型转换。JSON 表示值的树状结构;YAML 还可表示共享节点和带类型的值。多文档流也会被拒绝,不会擅自包进数组。JSON 转 YAML 保留所表示的值。
- **Google 加载了什么,又没拿到什么。** 广告和统计脚本来自 Google,捐赠按钮来自 Buy Me a Coffee。它们谁也没拿到你文本里的一个字符。读它、解析它、写它的每一行代码,都从这个源提供,也都列在仓库里。
- **断网可用。** 拔掉网线,这个工具一点变化都没有,因为它里面本来就没有联网这一步。这是最简单的证明。
**你可以自己核对。**上面这些不用你信。这个页面是仓库里的模板和配置生成出来的,构建脚本你能读,也能自己跑一遍,跑出来的结果就提交在 `dist` 分支上。拿实际发给你的内容,跟你自己从源码构建出来的结果对一遍就知道了: https://github.com/A-Box-of-Tools/website
最值得先读的几个文件:`config/site.toml` 里是 Content-Security-Policy,宁可拒绝一个锚点也不去猜它想说什么的读取器在 `src/shared/parse-yaml.js`;一次转换为什么就是一个解析器加一个打印器、中间没有任何同时认得两种格式的东西,在 `src/convert.js`。
不上传就把 YAML 转成 JSON 的步骤
- 选方向。YAML 转 JSON 或者 JSON 转 YAML。菜单下面那行小字会在你粘任何东西之前,而不是之后,告诉你这个方向会丢什么。
- 粘进来,或者把文件放上去。能选中能复制的都行。把文件放到选择框上,你自己的浏览器会读它并填进输入框——这里没有上传这一步可以省略——而
.json或.yaml的后缀顺便就把方向定好了。 - 选缩进。两个空格、四个空格,或者一个制表符。制表符只对 JSON 提供:YAML 是按空格定义的,制表符在它里面不是合法缩进。
- 在出错的地方读错误。在这里失败的解析器会告诉你它遇到了什么,在第几行第几列,而不是“位置 4193 处有意外的 token”。通常这就够你修好一份配置文件,不用再打开别的东西。
- 把结果拿走。复制,或者下载成文件,文件名按它出来的格式取。
说得更细的版本
如何互转 YAML 与 JSON 在浏览器中将支持的 YAML 子集转为 JSON,也可将 JSON 转为 YAML。复用前检查注释丢失、未支持的结构和精确数字文本。
工具箱里还有
常见问题
我的 YAML 会被上传到什么地方吗?
不会。这个页面上的两个解析器和两个打印器,都是在你自己的浏览器里、你自己的硬件上跑的函数。这个工具压根就没有网络功能,从不取任何东西,也从不发任何东西,页面的 Content-Security-Policy 里写着它允许联系的每一个地址,没有一个属于本站。这正是拿它处理部署配置的理由:那种文件里塞满主机名、桶名,偶尔还有某人打算挪走的密钥,把它粘进别人的转换器,就是把它给了对方。
把 YAML 转成 JSON 会丢什么?
JSON 会丢失注释。本解析器有意只支持 YAML 1.2 的子集,拒绝锚点、别名和标签,而不是替你决定展开方式或类型转换。JSON 表示值的树状结构;YAML 还可表示共享节点和带类型的值。多文档流也会被拒绝,不会擅自包进数组。JSON 转 YAML 保留所表示的值。YAML 规范定义了更完整的格式。
我的 YAML 里写的是 no,JSON 出来却是字符串。为什么?
YAML 1.1 将 yes、no、on 和 off 当作布尔值,导致挪威国家代码变成 false。本工具支持的子集使用 YAML 1.2 规则:这些词保留为字符串,true 和 false 是布尔值,null 和 ~ 是 null,数字标量是数字。YAML 输出会为歧义词加引号,以兼容仍使用旧规则的读取器。
它会保持我的键顺序吗?
会,两个方向都会,而这比听上去难。建立在 JSON.parse 上的转换器会悄悄把看着像整数的键挪到前面,于是 {"10":a,"2":b} 回来就成了 {"2":b,"10":a}。数字保留你打的每一位,所以一个二十位的账号不会因为双精度浮点丢掉最后三位。如果你就是想排序,有个勾选框,而且它按键读起来的样子排,不是按码位。
能一次转换好几份 YAML 文档吗?
不能,而且它会直说,而不是替你挑一份。带 --- 分隔符的文件装着不止一份文档,而 JSON 没有哪种形状表示“好几份文档”——用数组的话,就成了这份文件从没做过的断言。一份一份转。
这里为什么没有 YAML 格式化?
因为 YAML 没有值得一写的压缩形式——短的那种是流式风格,读不了,而读不了正是把文件留成 YAML 这件事的反面。排开 JSON、XML、HTML 和 CSS 是 JSON 格式化的活儿,而且它也排 YAML。
文件最大能有多大?
这里没有设限,因为没有服务器在为此付钱。真正的上限是你自己的设备:几兆字节的 YAML 没问题,文档很长的时候,页面会等你打字停下来再转换,而不是跟你抢键盘。
免费吗?需要注册吗?
免费,没有账号,不用登录,没有试用期,也不限制你粘多少。本站有广告,站点靠它维持;广告拿不到关于你文本的任何东西。
断网还能用吗?
能。页面加载一次之后拔掉网线,它照样工作。这也是证明没有上传的最简单办法:一个把你的配置送出去转换的工具,在你拔线的那一刻就停了。