sublime text 无法处理千万级 json/xml 文件,因其内存模型需全量加载文件导致崩溃;应改用 jq 等命令行工具流式处理,避免内存溢出。

Sublime Text 本身不支持直接处理千万级 JSON/XML 数据——不是插件不够快,而是编辑器内存模型根本扛不住。所谓“美化”,在超大文件里本质是自欺欺人;真要处理,得绕开编辑器、用命令行工具做流式处理。
千万级 JSON 文件别点开,更别格式化
打开一个 200MB 的 data.json,Sublime 就会卡死或崩溃,哪怕你只选中其中一段。这不是配置问题,是 Sublime 基于文本缓冲区的架构决定的:它要把整文件加载进内存做语法分析和渲染。JSON 格式化插件(比如 Pretty JSON、HTML-CSS-JS Prettify)内部调用的是 Python json.loads() + json.dumps(),对千万级数据意味着至少两轮全量内存拷贝。
- 现象:点击格式化后光标不动、界面无响应、几秒后弹出“Out of memory”或直接退出
- 真实瓶颈:不是 CPU,是 RAM —— 一个 500MB 原始 JSON 解析后内存占用常超 1.5GB
- 替代方案:用
jq流式处理,例如jq -c '.' large.json > compressed.json(压缩)或jq '.' large.json > pretty.json(美化),全程不落地、不爆内存 - 验证是否可用:终端运行
jq --version,没输出就先装brew install jq(macOS)或sudo apt install jq(Ubuntu)
小文件(
Sublime Text 4 自带的 Indent XML/JSON 命令专为结构化文本设计,不走 JS 解析器,不依赖外部环境,也不改编码。比所有插件都轻、快、准。
- 触发方式:按
Ctrl+Shift+P→ 输入Indent XML/JSON→ 回车 - 前提:文件必须识别为正确语法 —— 右下角显示
XML或JSON;如果不是,手动设:View → Syntax → XML或JSON - 不兼容场景:含 BOM 的 UTF-8 文件会失败;用记事本保存的 JSON 常带 BOM,解决办法是
File → Reopen with Encoding → UTF-8 - 注意:它只调整缩进和换行,不做语法校验 —— 如果 JSON 本身非法(如尾逗号、单引号键名),它照样格式化,但结果仍不可解析
插件选错=格式变破坏,这些组合必须避开
JSBeautify 和 HTML-CSS-JS Prettify 表面相似,底层逻辑完全不同:前者把 {"a":1} 当 JS 对象处理,可能加末尾逗号;后者虽基于同一库,但通过配置能禁用 JS 特性,只走 JSON 模式。
Miller (mlr) 是一个命令行工具,用于查询、整形和重新格式化名称索引数据,如 CSV、TSV、JSON 和 JSON Lines。它将 awk、sed、cut、join 和 sort 的功能整合到一个专为结构化数据处理而构建的单一工具中。
- 绝对禁用:
JSBeautify(尤其处理纯.json文件时),它默认开启end_with_newline和space_in_empty_paren,会悄悄插入非法字符 - 可用但需配置:
HTML-CSS-JS Prettify,必须在设置里明确关闭 JS 相关开关:"js": false、"css": false,只留"json": true - 已淘汰:
Pretty JSON在 ST4 上常报ImportError: No module named 'sublime',因它硬依赖 Python 2.7 的旧 API - 快捷键冲突高发区:
Ctrl+Shift+H默认被系统或输入法占用,建议在Preferences → Key Bindings中改为ctrl+alt+j并加context限定作用域
压缩 ≠ 反向美化,Build System 是唯一可控路径
Sublime 没有“压缩 JSON”命令,所有号称一键压缩的插件,底层都是调 python -m json.tool 或 jq -c。自己配 Build System 才能确保行为确定、不乱码、不改编码。
- 新建 Build System:
Tools → Build System → New Build System - 粘贴以下内容(适配 Python 3.6+):
{
"cmd": ["python", "-m", "json.tool", "$file"],
"file_regex": ".*",
"selector": "source.json"
}
这只是美化;压缩需另建一个,用 jq -c '.' "$file" 替代命令。关键点:不要勾选 encoding 字段,否则可能引入 BOM;路径变量用 $file 而非 $file_path,避免空格路径出错。
真正麻烦的从来不是怎么按快捷键,而是你不知道自己正在格式化的那个 JSON,其实开头就少了个左花括号——Sublime 不报错,插件静默失败,你却以为是工具不行。










