这个页面的代码没跑起来。

直接从文件夹里打开 index.html,浏览器会拦下 JavaScript 模块,于是你选好一个文件之后,页面不会有任何反应。改用 http 把这个文件夹提供出去:

powershell -ExecutionPolicy Bypass -File serve.ps1

然后打开 http://localhost:8080/。

JSON 格式化 — 排好它、压扁它,或者转换它

JSON、XML、HTML、CSS 和 YAML,格式化或转换。没有一个字被贴进别人的服务器。

语言: 简体中文
查看源码
你的文本和代码在浏览器里处理,无须上传处理。

格式化和转换都是对一串字符做算术,就在这个页面里做完。解析器是手写的,都在 src/ 里:shared/parse-json.js、shared/parse-xml.js、css.js、shared/parse-yaml.js;此外别无他物。这个工具没有任何形式的网络功能,没有什么可取,也没有什么可发。这一点在本站几乎别处都不如在这里要紧:人们往格式化器里贴的,是访问令牌、会话 cookie、客户记录,还有尚未发布的代码。

实时检查: 检查中…

离线: 检查中…

不用信我们说的。打开开发者工具,盯着“网络”面板,随便格式化点什么。没有哪个请求带走你贴进去的一个字符。嫌麻烦就直接拔掉网线,照样格式化。

1 选好要做的事

语言 判断只是个起点,改正只要一次点击。

给每个对象的键排序 按键读起来的顺序,而不是按码位,所以 item2 排在 item10 前面。仅限 JSON。

最外层元素的名字 XML 顶上只有一个元素,JSON 没有,所以得替它造一个。

2 贴进来

空

3 把结果带走

还没有结果。

 

以 Markdown 查看

怎样在不上传的前提下格式化或转换 JSON

  1. 选好要做的事。两个标签页,一个输入框:“格式化”把 JSON、XML、HTML、CSS 和 YAML 排好或压扁;“转换”把 JSON 变成 YAML 或 XML,再变回来。你刚格式化完的文本就是你要转换的文本,不用贴第二遍。
  2. 贴进来,或者把文件拖进来。凡是你能选中并复制的都行。拖到选择框上的文件由你自己的浏览器读进输入框:这里根本没有可省略的上传步骤。
  3. 让它自己判断语言,或者直接告诉它。菜单里写着它把这段文本当成了什么,改正只要一次点击。判断只是个起点,所以它被摆出来,而不是悄悄套用。
  4. 选好缩进,或者干脆压平。两个空格、四个空格,或者一个制表符。压平就是同一份文档,只是把纯粹为了阅读才存在的空白都去掉,结果里会写明这样省下了多少字节。
  5. 在出错的地方读错误。这里的解析器失败时,会说它看到了什么,以及在第几行第几列,而不是“位置 4193 处有意外的 token”。通常这就足够把一份配置文件改对,不用再打开别的东西。
  6. 把结果带走。复制它,或者下载成文件,文件名跟着输出语言走。

说得更细的版本

怎么不把 JSON 交给任何人也能格式化 在自己的浏览器里排版、检查和压缩 JSON:一个格式化工具绝不该改动你文件的哪些地方、错误信息该怎么读,以及你把东西粘进哪个框里为什么要紧。

常见问题

我的文本会被传到哪里去吗?

不会。这个页面上的每个解析器和写出器,都是在你自己的浏览器里、你自己的硬件上运行的函数。这个工具没有任何形式的网络功能:它从不去取什么,也从不发出什么;页面的 Content-Security-Policy 里写着它允许联系的每一个地址,没有一个属于本站。这正是拿它来处理访问令牌、会话 cookie 或客户记录的理由:把这类东西贴进别人的格式化器,等于把它交给了对方。

格式化 JSON 除了排版之外还会改动什么吗?

不会,而这比听上去难。键会保持你写的顺序:建在 JSON.parse 上的格式化器会悄悄把像整数的键挪到前面,于是 {"10":a,"2":b} 回来就成了 {"2":b,"10":a}。数字会保留你敲的那些位,所以二十位的 id 不会把最后三位丢给双精度,1e999 也不会变成 null。重复的键两个都留着,因为标准并没说哪个胜出,丢掉一个就是替你做决定。

它能格式化哪些语言?

JSON、XML、HTML、CSS 和 YAML。JSON、XML、HTML 和 CSS 还能压平;YAML 不行,因为它的短写法是流式风格,那是读不下去的,而读不下去恰恰是把文件留在 YAML 的理由的反面。JavaScript 是有意不在名单上的,见下面那条问题。

为什么它不格式化 JavaScript、Python 或 SQL?

因为要排开一门编程语言,就得把它真正解析明白,而一个差不多对的格式化器比没有还糟:它产出的代码看着没问题,做的却是另一回事。JSON、XML、CSS 和 YAML 的文法小到可以手读,也能用你自己跑得动的测试查清楚。JavaScript 的格式化器叫 Prettier,那是一兆字节的解析器,它该待在你的编辑器里,而不是一个网页上。

我的 YAML 写的是 no,转成 JSON 却成了字符串。为什么?

因为它本来就是字符串,而这里读的是 YAML 1.2,不是 1.1。在 YAML 1.1 里,yes、no、on 和 off 是布尔值,这就是那个把挪威的国家代码变成 false 的著名毛病。YAML 1.2 把它去掉了,这个工具也一样:只有 true、false、null 和 ~ 会被读成文本之外的东西。反过来写出去时,这些词会加上引号,尽管这里不加引号也照样读成文本——因为下一个打开这个文件的东西未必如此。PyYAML 至今默认还是 1.1。读得严、写得稳,是唯一在两个方向上都不出错的组合。

把 YAML 转成 JSON 会丢什么?

注释,因为 JSON 没地方放。锚点、别名和标签会被直接拒绝,而不是替你猜:它们每一个说的都是 JSON 说不出来的事,而一个悄悄挑了个解释的转换器,交给你的将是一份并非原文所说的文档。反方向不丢任何东西:每一份 JSON 文档本来就已经是一份 YAML 文档。

把 JSON 转成 XML 会丢什么?

空对象、空数组和空字符串之间的区别,它们都会变成一个空元素;还有每个值的类型,因为 XML 没有类型——这也是为什么反向转换会把一切都留成字符串,而不是断定 8080 是个数字。数组会变成重复出现的元素,因为只有这种形状读得回来;而元素名承载不了的键,会把不便的字符替换掉,而不是吐出一份没有解析器读得动的文档。

重新缩进 HTML 会改变页面的样子吗?

可能会,这一点这里说得很老实。两个行内元素之间的空白,就是两个词之间的一个空格,挪动它并不免费。有两件事把这个风险摁住:<pre> 和 <textarea> 原样照抄,而一个只装着文本的元素会留在一行上。其余的才会被排开。

它能处理多大的文件?

这里没有设上限,因为没有哪台服务器在为上限掏钱。真正的天花板是你自己的机器:几兆字节的 JSON 没问题;文档特别长的时候,页面会等你敲字停一下再重新排版,而不是跟你抢键盘。

它免费吗,需要注册吗?

免费,没有账号,不用登录,没有试用期,贴多少也没有上限。本站带广告,经费就是从那儿来的,广告拿不到任何关于你文本的信息。

断网能用吗?

能。页面加载一次之后断开网络,它照样干活。这也是证明“什么都没上传”最省事的办法,真要把你的文本送出去格式化,拔线那一刻就停了。