使用JSON.parse()解析嵌套JSON字符串遇SyntaxError错误求助
解决JSON.parse()的"Unexpected token u"错误及嵌套JSON解析问题
首先,咱们拆解你遇到的两个核心问题:烦人的Unexpected token u报错,以及嵌套JSON字符串的解析需求。
为什么会出现"Unexpected token u"错误?
这个错误90%以上的概率是因为你传给JSON.parse()的参数是undefined,而非有效的JSON字符串。常见诱因包括:
- 服务器数据还没返回就提前调用了解析(比如异步请求还未完成)
- 接口请求失败,返回了
undefined或null - 误将未定义的变量传入了
JSON.parse()
你可以先在解析前加个console.log,确认要解析的内容是完整的JSON字符串,而不是undefined。
正确解析嵌套JSON的分步方案
你的服务器返回数据本身是合法JSON,但其中的data字段是转义后的JSON字符串,所以需要分两次解析:
- 第一步:解析外层完整响应
先确保拿到服务器返回的完整字符串,再解析整个结构:
// 示例:假设你从服务器获取到的完整字符串如下 const serverResponse = '{ "StatusCode": 0, "StatusMessage": "OK", "StatusDescription": [ { "id": "1", "datetime": "2018-04-13", "data":"{ \\"id_data\\": \\"1S1S2ED333\\", \\"model\\": \\"02S\\", \\"serial_data\\": \\"123456\\" }" } ] }'; // 解析外层JSON结构 const parsedOuterData = JSON.parse(serverResponse);
- 第二步:解析嵌套的data字段
此时parsedOuterData.StatusDescription[0].data就是转义后的JSON字符串,再次调用JSON.parse()即可:
const nestedParsedData = JSON.parse(parsedOuterData.StatusDescription[0].data); console.log(nestedParsedData); // 输出结果:{ id_data: "1S1S2ED333", model: "02S", serial_data: "123456" }
更稳健的写法(含异常处理)
为避免数据异常导致报错,建议加入空值判断和try-catch:
try { // 替换为你实际获取数据的方式(如fetch/axios) const serverResponse = await fetch('/your-api-url').then(res => res.text()); if (!serverResponse) { throw new Error('服务器返回空数据'); } const parsedOuterData = JSON.parse(serverResponse); // 确保嵌套数据字段存在且有效 if (!parsedOuterData.StatusDescription || parsedOuterData.StatusDescription.length === 0 || !parsedOuterData.StatusDescription[0].data) { throw new Error('嵌套数据不存在或格式异常'); } const nestedParsedData = JSON.parse(parsedOuterData.StatusDescription[0].data); console.log('解析成功的嵌套数据:', nestedParsedData); } catch (error) { console.error('解析出错:', error.message); }
针对你的场景再排查
回到你的报错,优先检查第一次调用JSON.parse()的参数是否为undefined。比如如果还没完成外层数据解析,就直接去解析data字段,会导致传入undefined,触发"Unexpected token u"错误。先确保外层解析成功,再处理嵌套部分就能解决问题。
内容的提问来源于stack exchange,提问作者OnnaB
相关产品推荐
相关产品推荐

