sublime text 的 json 语法高亮在数据不规范时会失效,需手动切换为 javascript 语法;正则提取应处理转义与换行;多键提取推荐多光标或 python 脚本;jsonpath 插件支持有限,复杂查询宜用浏览器控制台;注意 bom 和不可见字符导致的解析错误。

JSON数据结构不规范时,sublime_text自带的JSON语法高亮会失效
Sublime Text 默认对 .json 文件启用 JSON 语法高亮和验证,但一旦文件里混入注释、尾随逗号、单引号字符串或换行符未转义(比如原始日志中直接输出的多行 JSON),它就会放弃解析,导致无法折叠、无法跳转、也难以用正则精准定位键名。这时候别急着换工具,先在右下角点击语法标识,手动切换为 Plain Text 或 JavaScript —— 后者对宽松 JSON 兼容性更好,能保留基础高亮,且不影响后续查找。
用正则提取 "key": "value" 类型值时,必须处理嵌套引号和转义
直接搜 "name": "(.*?)" 看似简单,但遇到 "desc": "He said "Hello"" 就会截断;更麻烦的是键值本身含换行(如 "content": "line1
line2")时,普通 . 不匹配换行,结果为空。正确做法是:
- 启用正则模式(
Ctrl+R→ 勾选.*按钮) - 用
"name"s*:s*"((?:[^"\\]|\\.)*?)".*匹配带转义的双引号字符串(\\.表示匹配任意被反斜杠转义的字符) - 若需跨行匹配,改用
"content"s*:s*"((?:[^"\\]|\\.|\n)*?)",显式加入\n - 提取后可配合
Ctrl+Shift+P→Convert Case to Lowercase统一格式
批量提取多个键且保持顺序时,别依赖单次查找替换
想同时取 "id"、"status"、"created_at" 三个字段?逐个查容易漏或多选错行。推荐分两步:
- 先用多光标:按住
Ctrl(Windows/Linux)或Cmd(macOS),鼠标点击每个目标键名(如所有"id"),再按Right Arrow跳到冒号后,Ctrl+Shift+→扩展到对应值末尾引号,最后Ctrl+C - 若数据量大,写个临时 Python 脚本更稳:把当前 Sublime 内容复制进脚本,用
json.loads()解析(提前用re.sub(r'//.*', '', text)清注释),再用字典推导取值 - 注意:Sublime 的列选择(
Alt+鼠标拖拽)对齐提取很实用,但只适用于键名左对齐、冒号位置一致的规整数据
JSONPath 插件在 Sublime 中实际支持有限
虽然社区有 JSONPath 插件(如 Sublime-JSONPath),但它依赖 Python 的 jsonpath-ng 库,而 Sublime 的 Python 环境默认不含该库,手动安装易出错;且插件只支持简单路径如 $.items[0].name,对过滤表达式(如 $[?(@.age > 18)])基本不响应。真要跑复杂查询,不如把内容复制到浏览器控制台,粘贴 JSON.parse(...) 后用原生 JS 查询,效率更高也更可控。
真正容易被忽略的是原始 JSON 是否含 BOM 或不可见控制字符——它们会让 json.loads() 报 UnicodeDecodeError 或 Expecting property name enclosed in double quotes。用 Sublime 的 View → Show Console 输入 view.encoding() 确认编码,再用 Ctrl+Shift+P → Set Encoding to UTF-8 强制重载,比反复调正则更省时间。










