jsonlint报错无行号定位时,需检查控制字符、编码及bom头;sublime语法高亮不校验trailing comma等错误,须用jsonlint工具或正确配置插件;校验通过但接口失败需排查注释、科学计数法及换行符。

JSON校验失败时,jsonlint 报错但没定位到行号?
Sublime 自带的 JSON 语法高亮不等于校验,它只检查基础结构(比如括号是否匹配),遇到 "key": null, 这种 trailing comma 或 "name": "张三", 后多逗号,直接静默忽略——根本不会报错。真正要发现这类问题,得靠 jsonlint 命令行工具或插件调用它。
常见现象是:保存后文件看起来“没问题”,但前端 JSON.parse() 报错,或者后端返回 400 Bad Request,而 Sublime 界面毫无提示。
- 确保已安装 Python(
jsonlint是 Python 工具),运行pip install jsonlint - 插件如
SublimeLinter-jsonlint必须配置executable路径,Windows 用户常填成jsonlint.cmd,实际应为jsonlint(Python Scripts 目录下) - Mac/Linux 用户若用 pyenv 或 conda,
which jsonlint结果需填进插件设置,否则插件找不到命令,误判为“无错误”
Sublime 中按 Ctrl+Shift+P 调不出 JSONLint: Validate?
这不是插件没装,而是插件没“激活”——Sublime 不会自动为 .json 文件启用 JSON 校验,必须手动指定语法类型或绑定文件关联。
- 先确认当前文件右下角显示的是
JSON,不是Plain text或JavaScript;点一下那里手动选JSON - 如果用了
SublimeLinter+SublimeLinter-jsonlint组合,它默认只在保存时校验,不提供命令面板入口;想手动触发就得装独立插件JSONLint(作者:mikemaccana) - 装完重启 Sublime,再按
Ctrl+Shift+P搜索JSONLint: Validate才会出现
jsonlint 报 Invalid control character at: line 1 column 2 (char 1) 怎么查?
这通常不是语法错,而是文件里混入了不可见控制字符,比如从 Word 复制过来的中文引号、Windows 记事本存的 BOM 头、或编辑器自动插入的零宽空格(\u200b)。
- 用 Sublime 的
View → Show Console,输入view.encoding()看当前编码,非UTF-8时容易出这个错 - 打开
View → Character Palette,把光标挨个挪到报错位置前后,看有没有异常符号(尤其注意引号、冒号、逗号是否全角) - 临时解决:全选 →
Ctrl+Shift+P→ 输入Convert to UTF-8→ 再保存,多数能过
校验通过但接口仍报 JSON 解析失败?重点查这三点
Sublime 插件校验的是“标准 JSON”,但很多系统(尤其是老后端或嵌入式设备)对 JSON 的容忍度更低,或额外要求格式规范。
- 检查是否有注释:
jsonlint默认不支持//或/* */,但某些插件允许开启allow_comments,开了就掩盖真实问题 - 确认数字没用科学计数法:
1e5合法,但部分 Java 或 C++ JSON 库会拒收,改用100000 - 留意尾部换行:
echo '{"a":1}' > a.json生成的文件末尾无换行,某些严格解析器会认为不完整,Sublime 插件不报,但curl -d @a.json可能失败
JSON 校验本身很简单,难的是搞清“谁在解析”“用什么库”“开了哪些宽松选项”。别只盯着 Sublime 有没有红波浪线,抓包看请求体、用 python -m json.tool xxx.json 交叉验证,才不容易漏掉那种“看着对、跑起来跪”的细节。










