JSON、SQL 与 XML 在线格式化工具
在浏览器中格式化、压缩并校验 JSON、SQL、XML 与代理列表,全部本地处理。
选择一个工具
格式化只能证明文档能被解析,证明不了文档是对的。
这里有四个工具,划分依据是输入语言,而不是处理方式。JSON、SQL、XML 三个格式化器都会先解析文档,再把结构重新排开;代理列表格式化则对按行组织的地址列表做同样的事。四者都在当前浏览器标签页内运行,而且失败时的输出和成功时同样有价值:解析器停下的位置,就是你的假设和语法规则分道扬镳的地方。
先按语言选工具,再按问题选用法
载荷被拒绝、而日志只说了「格式错误」时,用 JSON 格式化与校验。它真正有用的产出是错误偏移量;问题通常出在报告位置的前一个字符,因为解析器只能指出「这里本该出现一个值」。
需要把 SOAP 信封或构建配置读到能找出某一个元素时,用 XML 格式化与压缩。XML 和 JSON 有一处关键差异:元素内部的空白属于内容,对同时包含文本与子标签的元素,新加的缩进会并入消费方读到的文本。
别人丢给你一条从 ORM 日志里抠出来的单行语句时,用 SQL 格式化与压缩。只有把子句分层堆叠,LEFT JOIN 后面跟着一个对聚合值的 HAVING 才会显形。方言要选真正执行它的那个数据库,选错正是带引号标识符被悄悄改掉大小写的原因。
格式化不等于校验,时间都耗在这道缝里
合法的 JSON 能被解析,正确的 JSON 还要带着接收方期望的字段和类型,后者属于 JSON Schema 的范畴,任何格式化器都回答不了。如果你要的只是大文档里的某一个值,就别再翻格式化结果了,直接用 JSONPath 测试工具。
同样的分工,也是 XML 格式化与 XML 格式校验被拆成两个页面的原因。前者用于阅读和重排,后者只给出「是否良构」的结论以及第一个断点的位置。两者都不按 XSD 校验文档,因为「良构」和「符合模式」是两个不同的断言。
代理列表格式化是一个碰巧与网络有关的文本工具
代理地址没有统一的文本写法。一家导出 host:port:user:pass,另一家导出 user:pass@host:port,SOCKS 条目则可能带协议头也可能不带。格式化工具能识别这些形态并统一输出一种,三家拼起来的列表不必逐行手改。
那里唯一有实质后果的选项是 socks5 与 socks5h:前者由你的机器解析主机名,后者由代理解析。格式化说明不了可达性,所以规整之后先用列表对比去重,再用批量代理可用性检测实际测试,而且只测试你有权使用的代理。
在采信结果之前
- 保留原始输入并与输出逐段比对。只有确认「除空白外什么都没动」时,格式化结果才值得信任。
- 格式化 JSON 后重新核对长整数。超过 2^53 - 1 的值会被还原成最接近的双精度数。
- 确认所选 SQL 方言与将要执行语句的数据库一致,然后逐个检查带引号的标识符。
- 检查同时含文本和子标签的 XML 元素;不希望被重排的文本,优先放进 CDATA。
- 压缩放在最后一步,并保留可读副本。压缩是为了把载荷塞进某个地方,不是为了解析更快。
常见问题
格式化会改变我的数据吗?
只有词法单元之间的空白会移动,因此键、字符串和布尔值可以精确往返。有两个例外值得留意:超出双精度精确表示范围的 JSON 数字,以及同时包含文本与子元素的 XML 节点,那里新增的缩进会并入文本。
为什么浏览器控制台认可的 JSON 会被判为非法?
因为 JavaScript 引擎接受的是对象字面量,而 JSON 是一门严格更小的语言。注释、尾随逗号、单引号字符串、不加引号的键、undefined 和 NaN 都是合法 JavaScript、非法 JSON。JSON5 与 JSONC 是各自独立的格式,需要各自的加载器。
我粘贴的内容会被上传吗?
不会。四个工具都在当前浏览器标签页内解析并重新输出,不发送到服务器,也不跨访问保存。但内容仍然显示在屏幕上、对浏览器扩展可见,所以来自生产系统的令牌、连接串和代理密码请先脱敏。