HJSON 格式化与验证工具
指导
HJSON 格式化与验证工具
粘贴 HJSON —— 一种人类友好的 JSON 变体,支持注释、未引号的键和字符串、多行值以及尾随逗号——并立即将其转换为严格的 JSON。该工具还支持反向转换:将严格的 JSON 粘贴进来,即可获得一个更易阅读和编辑的 HJSON 版本,其中包含未引号的键。
验证在您输入时逐行进行,因此语法错误会立即出现,并带有行号和列号提示。所有操作都在您的浏览器中本地完成——无需文件上传,无需服务器往返,数据不会离开页面。
如何使用
- 将 HJSON 或严格的 JSON 粘贴到输入框中,或上传文件。
- 选择一个方向—— HJSON → JSON 用于清理人工编辑的配置文件,或 JSON → HJSON 用于使机器生成的 JSON 文件更易于维护。
- 选择缩进方式(2个空格、4个空格、制表符,或用于 JSON 输出的最小化格式)。
- 可选择按字母顺序对嵌套对象的键进行排序,以确保差异稳定。
- 复制格式化后的输出,或将其下载为一个
.json或.hjson文件。
特征
- 双向转换 —— HJSON 转换为严格 JSON 并返回,错误信息会明确指出违规行。
- 完整的 HJSON 语法 -
#,//,并且/* */注释;未引号的键;无引号的单行字符串;三引号多行字符串,具有智能缩进;尾随和可选的逗号。 - 无大括号的根对象 —— 顶层
key: value键值对无需外层大括号{ }被视为根对象。 - 干净的输出 —— 选择 2 个空格、4 个空格、制表符或最小化缩进;HJSON 输出会移除标识符键的引号,以实现更清晰的差异。
- 稳定的排序 —— 可选地对嵌套对象的键按字母顺序排序,以确保格式化输出在多次运行间差异稳定。
- 本地且私有 —— 解析和格式化完全在您的浏览器中进行;不会上传任何内容。
何时使用 HJSON 而非 JSON?
HJSON 在人类手动编辑的配置文件中表现优异:如构建流水线、部署清单、命令行工具设置、游戏配置等场景。您希望获得 YAML 的可读性,但又不想承受 YAML 的缩进问题。HJSON 是 JSON 的严格超集,因此任何有效的 JSON 也是有效的 HJSON —— 您可以逐步采用,文件由文件地进行。
对于机器间的数据交换(API、存储、网络协议),请保持严格的 JSON:它具有广泛支持的解析器和更小、更明确的语法。在构建或加载时将 HJSON 转换为 JSON,并让人类继续编辑更友好的源文件。
常问问题
-
什么是 HJSON,以及它与 JSON 的区别?
HJSON,即“人类 JSON”,是一种为人工编辑配置而设计的 JSON 变体。它增加了注释(#、//、/* */)、允许无引号的键和字符串、多行字符串(三引号)以及尾随或可选的逗号。严格的 JSON 为确保机器解析的明确性,禁止了所有这些特性。由于每个有效的 JSON 文档也是有效的 HJSON 文档,HJSON 是一个严格的超集——您可以逐步采用它。
-
HJSON 与 JSON5、JSONC 和 YAML 相比如何?
JSON5 也增加了注释和尾随逗号,但保留了字符串引号,并要求使用 JavaScript 风格的标识符键。JSONC(带注释的 JSON)仅增加 // 和 /* */ 注释。YAML 要求更为宽松,但依赖显著的空白字符,这在深度嵌套结构中容易出错。HJSON 介于 JSON5 和 YAML 之间:它提供了 YAML 的大部分可读性,同时采用大括号限定结构,因此误缩进不会改变语义。
-
HJSON 的多行字符串和 YAML 的块标量是否等效?
它们服务于相同的目的,但在机制上有所不同。HJSON 的多行字符串由三重单引号(''')界定,关闭的 ''' 的缩进决定了所有内部行的缩进方式——这使得块在不同嵌套层级间具有可移植性。YAML 提供了字面(|)和折叠(>)块标量,并带有单独的换行指示符(-、+)来控制尾随换行。HJSON 的单一风格更简单,但对尾随空白的控制较少。
-
HJSON 是否改变了数字、布尔值和 null 的解析方式?
不会。数字(包括整数、小数和科学记数法)、布尔值和 null 遵循与 JSON 相同的词法规则。解析规则非常明确:如果一个未引号的值可以被解析为 JSON 中的数字、true、false 或 null,则被解析为该原始类型;否则,它被解析为一个无引号的字符串,一直延伸到该行末尾。
-
在将 HJSON 转换为 JSON 时,是否可以保留注释?
不是在标准意义上的保留——严格的 JSON 不包含注释语法,因此忠实的转换必须删除它们。某些工具链通过将 HJSON 文件作为“真实来源”保留,并仅在构建或加载时生成 JSON 作为构建产物,或通过在父键下存储注释(如 _comment)来绕过此问题。如果注释的保留至关重要,请将 HJSON 作为可编辑的源文件,并在需要时重新生成 JSON,而不是反向操作。
