配置与文本格式互转:XML、INI、Gzip 与转义

接手老系统,配置是 .ini、接口还返 XML;压缩后的二进制要贴进代码字符串;拼模板时反斜杠数不清——这四件事看着不相关,其实都是「同一份信息换个壳」。四个工具对应四种壳,规则记住了就不会转丢东西。

一、INI → JSON:老配置的现代化

INI 用 [section] 分段、key=value 赋值,分号和井号都是注释。转 JSON 时工具会自动识别 section、把布尔值和数字还原成对应类型(而不是一律当字符串),注释按规则处理。

常见坑:同名 key 在不同 section 里是允许的,转成 JSON 后靠层级区分,别在合并时覆盖;值里含等号或井号 的老配置需要人工复核是否被误切。转完建议把 JSON 与原文各扫一眼,确认类型没跑偏。

二、XML ↔ JSON:属性和文本怎么不丢

XML 比 JSON 多两样东西:属性、以及「既含属性又含文本」的混合节点。转换约定通常是:

XML 内容JSON 表示
属性 id="7""@id": "7"(@ 前缀)
节点文本"#text": "内容"
重复同名节点自动合并成数组

这套约定保证了双向互转不丢信息。注意:XML 属性值一律是字符串,转 JSON 后数字仍是字符串,需要数值比较时要显式转换;反向从 JSON 转回 XML 时,@ 与 #text 会被识别为属性和文本而不是普通字段。

三、Gzip / Deflate:把二进制变成能粘贴的文本

浏览器原生 CompressionStream 支持 gzip、deflate、deflate-raw 三种格式。工具压缩文本或文件后,把二进制结果用 Base64 呈现——这样就可以直接贴进代码、配置文件或接口调试窗口,不会因不可见字节被编辑器吃掉。

三个格式的差别只在外层封装:gzip 带文件头与校验、deflate 是 zlib 封装、deflate-raw 是裸数据流。解压时要选和压缩时一致的格式,选错通常表现为「数据损坏」而不是明确报错。验证压缩链路正确性时,压缩再解压、比对原文一致即可。

四、特殊字符转义:四种语境别混用

最容易犯的错是把四种语境的转义混着用:HTML 里写 \u 不会还原,JSON 里写 &# 也不会还原。转义工具支持四种模式双向反转义并实时预览,拼完先预览一遍再复制,省得数反斜杠。

五、常见问题

问:INI 转 JSON 后 true 变成了字符串 "true" 吗?
工具会自动识别布尔值和数字类型,但形如 yes/on 的老式写法建议转成标准 true/false 后再转,避免下游解析分歧。

问:XML 里同名节点只有一个时,JSON 是对象还是数组?
取决于工具约定,通常按「重复才合并成数组」处理。下游代码若固定期望数组,生成后要人工包一层。

问:这些转换会上传我的配置文件吗?
不会,四个工具都在浏览器本地解析与计算,配置和文本不出本机。

🔄 INI 转 JSON:识别 section、注释与布尔/数字类型;XML 转 JSON:属性用 @ 前缀、文本用 #text 保留、同名节点合并成数组,支持双向。Gzip / Deflate 压缩解压:文本与文件压缩,二进制结果以 Base64 呈现;特殊字符转义工具:HTML / JSON / Unicode / JavaScript 四种模式转义与反转义,实时预览。

六、一条迁移路径

  1. 老配置先转 JSON,人工核对类型与同名 key;
  2. 接口数据若是 XML,转 JSON 后确认 @ 与 #text 的处理符合下游预期;
  3. 压缩链路压缩→Base64→解压→比对原文,四步验证;
  4. 拼模板字符串前,用转义工具按目标语境预览,再复制。

格式转换的坑几乎都在「信息丢失」和「语境混用」这两处。规则清楚了,四个工具就能放心当日常管道用。