JSON解析异常排查:自用密码保存程序非空文件仍报错求助
嘿,我之前也踩过类似的坑!文件明明非空却抛出JSON解析异常,大概率是下面这些原因导致的,你可以挨个排查试试:
可能的问题原因及排查方向
- 文件内容并非合法JSON格式:哪怕文件有内容,只要JSON语法不规范(比如键没加双引号、用了单引号代替双引号、少了闭合的
}/]、末尾多了逗号),解析器都会直接报错。你可以把文件内容复制到本地的jq命令行工具里校验,或者用文本编辑器的JSON语法检查功能(比如VS Code的JSON插件)快速定位问题。 - 文件存在不可见字符或编码不匹配:比如文件开头带BOM(字节顺序标记),或者保存时用了GBK等非UTF-8编码,但你的程序默认用UTF-8读取解析,就会导致解析失败。可以用VS Code打开文件,看右下角的编码标识,或者用十六进制编辑器查看文件开头有没有奇怪的前缀字节。
- 检查文件为空的逻辑有漏洞:你是不是只判断了文件字节数大于0?但如果文件里全是空格、换行、制表符这类空白字符,虽然文件非空,但解析JSON时会因为没有有效结构报错。建议读取内容后先做
trim()处理,再判断是否有有效内容,或者直接在解析前先校验内容的JSON结构合法性。 - 文件读取不完整:比如你的程序读取文件时用了不恰当的方法,或者文件被其他进程占用,导致只读到了部分内容就开始解析。可以在读取后把内容打印出来,看看是不是和实际文件里的内容完全一致。
- 文件意外损坏或篡改:比如程序异常退出时没正确完成JSON写入,导致文件里只有半段JSON;或者磁盘错误、第三方工具(比如病毒扫描)修改了文件内容。这种情况下文件非空,但内容是残缺的无效JSON。
内容的提问来源于stack exchange,提问作者crousap
相关产品推荐
相关产品推荐

