You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React解析服务器JSON对象失败:Unexpected token [ 语法错误求助

解决JSON解析错误:Uncaught (in promise) SyntaxError: Unexpected token [ in JSON at position 1

这个错误的核心原因是前端尝试解析的JSON响应结构和你预期的不一致——虽然你确认了目标JSON格式合法,但实际从API返回的内容并不是你所期望的{"arrayName": [{},{},...]}结构。下面是一步步的排查和解决思路:

1. 先确认API返回的真实内容

这是最关键的一步,不要只依赖后端文档,直接看实际响应:

  • 打开浏览器开发者工具(F12),切换到「Network」标签页
  • 触发你的API请求,找到对应的请求条目,点击查看「Response」标签
  • 仔细检查返回的内容:
    • 是不是直接返回了数组(比如[{object},{object}]),而不是包裹在arrayName字段里的对象?
    • 开头有没有多余的空格、换行或者特殊字符(比如BOM头)?
    • 有没有返回非JSON内容(比如错误提示文本、HTML页面)?

举个例子:如果API返回的是 [{"id":1},{"id":2}](开头多了空格),那么JSON解析器会在位置0看到空格,位置1看到[,而它预期的是对象的起始符{,就会抛出你遇到的错误。

2. 检查后端的返回逻辑

如果实际响应是纯数组而非带arrayName的对象,那问题出在后端:

  • 确认后端接口是否正确封装了数组到指定的对象字段中
  • 排查后端代码是否有遗漏的序列化逻辑,比如不小心直接返回了数组变量,而不是包含该数组的对象

3. 调整前端代码适配响应(或修正后端)

根据实际返回的内容,有两种解决方向:

情况A:后端确实返回了纯数组

修改前端解析逻辑,直接处理数组即可:

fetch(`${api}/your-endpoint`, {
  method: 'GET', // 或你的请求方法
  headers: headers
})
.then(res => res.json())
.then(arrayData => {
  // 这里arrayData就是你要的数组,直接使用即可
  console.log(arrayData);
})
.catch(err => console.error(err));

情况B:后端返回的内容有多余字符/非JSON

  • 要求后端修复响应,确保返回纯净的、符合预期格式的JSON
  • 如果是临时调试,可以在前端先把响应转成文本,清理多余字符后再解析:
fetch(`${api}/your-endpoint`, {
  method: 'GET',
  headers: headers
})
.then(res => res.text())
.then(text => {
  // 清理开头的空格或特殊字符
  const cleanedText = text.trim();
  const data = JSON.parse(cleanedText);
  console.log(data.arrayName);
})
.catch(err => console.error(err));

4. 排除请求本身的问题

虽然错误出在解析响应,但也可以快速排查:

  • 确认请求URL是否正确,有没有拼写错误导致返回404/500页面(这类页面是HTML,解析成JSON肯定报错)
  • 检查请求头是否正确,比如Content-Type和Accept是否和后端要求匹配

内容的提问来源于stack exchange,提问作者Michael Porter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:01:23