JSON常见问题解答,处理JSON解析错误与编码问题

📍 WDQWDWQD987AAAAA:216.73.216.78
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /5d47850d8153.html
📄

JSON常见问题解答,处理JSON解析错误与编码问题

第一次接触JSON的朋友,在处理数据交换或配置文件时,常被解析报错和乱码卡住。这篇文章为你梳理排查思路与通用解决路径,帮你少走弯路。你将学会如何定位语法错误、区分编码陷阱,以及用工具逐步验证。具体功能以站内实际为准,但核心方法论是通用的。

别急着改代码,先分清报错是语法层还是数据层

很多人一看到“JSON解析失败”就直接去改引号,结果越改越乱。第一步应该是看错误提示指向的位置。如果是Unexpected tokenExpected property name,那多半是语法问题,比如多了一个逗号、字符串用了单引号、键名没加双引号。如果错误提示的是UnicodeMalformed,那就要考虑编码问题,比如文件本身是GBK但声明了UTF-8。建议先把报错信息复制出来,搜一下关键词,再对照你手里的数据片段,别凭着模糊记忆去猜。

方案A:手写数据时,用“最小化复现”来定位坑

当你手动拼一段JSON却一直报错,最有效的办法是删减法。把数据砍到只剩一个键值对,比如{"a":1},如果这个能通过,再逐步加回其他字段。每次只加一个,看是哪一步触发了错误。常见坑包括:数字前导零(如01)、未转义的反斜杠、控制字符(如换行符直接放在字符串里)。另外,不要用NaNInfinity,标准JSON不支持这些值。这个过程虽然枯燥,但能让你清楚知道问题出在哪个字段,而不是整段推翻重写。

方案B:解析第三方接口数据时,先做编码探测

如果你是在程序里请求别人返回的JSON,遇到乱码或解析失败,先别怀疑对方格式。用文本编辑器打开原始响应,看头部是否有charset声明。如果没有声明,试着用十六进制查看前几个字节:如果是EF BB BF那是UTF-8带BOM,如果是FF FE那是UTF-16小端。很多解析器默认按UTF-8处理,但数据却是GBK或Latin-1,这时候你需要在读取时指定正确的字符集。记住一个通用原则:先保存为纯文本,再用支持编码转换的工具打开,确认实际字节内容,而不是直接用浏览器或终端打印出来看(终端可能做了自动转换,反而掩盖了真实问题)。

方案C:处理混合编码或转义字符时,用两步走

有些JSON字符串里嵌了转义的Unicode,比如\u4f60\u597d,这看起来乱,但其实是合法的。如果你用正则去匹配或直接替换,很容易误伤。正确做法是分两步:第一步,只验证语法结构,不关心内容是否可读,用在线校验器或本地脚本跑一遍,确认没有括号不匹配、引号缺失等问题。第二步,再做解码转换,把\uXXXX转成实际字符,或把特殊字符转成安全形式。过程中不要试图手工去解码,容易出错。关键是区分“数据本身是坏的”和“数据显示是坏的”这两件事。

工具辅助判断:哪些环节可以用在线服务或命令行

对于不熟悉的JSON片段,你可以先用本地脚本或命令行工具做语法检查,这样不依赖网络。如果手边只有浏览器,也可以打开开发者工具的“控制台”,直接定义一个对象然后JSON.stringifyJSON.parse来回倒一次,看是否报错。这种方式能快速验证一条数据到底是不是严格合法的JSON。需要注意的是,不同语言或库对JSON的宽容度不一样,比如JavaScript默认允许单引号,但标准JSON不允许。所以如果你要跟其他系统对接,务必按标准来,不要依赖某个解析器给你的“宽松”待遇。

常见问题

JSON解析报错“Unexpected token”但我看不出哪里错了怎么办?

先复制出错位置附近的字符串,删除多余的空格和换行,再逐个检查冒号、逗号、括号是否成对。可以在网上搜“JSON validator”找在线校验工具,把内容粘贴进去,它会告诉你具体行号和字符位置,比你自己肉眼找快很多。

从文件里读取JSON显示中文乱码,怎么处理?

先确认文件本身的编码格式,用支持编码查看的编辑器(如Notepad++或VS Code)打开,看右下角显示的编码。如果文件是UTF-8,但你的代码按GBK读取,就会乱码。调整读取时的编码参数即可,不要试图去替换乱码字符,那样会损坏原始字节。

JSON字符串里有反斜杠或引号,怎么转义才正确?

在JSON里,双引号必须写成\",反斜杠本身要写成\\。如果你需要表示换行,用\n,而不是真的敲一个回车键。如果数据是嵌套多层,比如JSON里面包含一段HTML,那所有的引号都需要转义,否则解析器会提前终止字符串读取。

相关阅读

内容更新时间:以站内最新版本为准,页面功能可能随改版调整

图1 图2

nginx