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

Next.js出现SyntaxError: Unexpected token < in JSON at position 0错误求助

解决Next.js中SyntaxError: Unexpected token < in JSON at position 0的潜在原因

你遇到的错误本质是response.json()尝试解析非JSON内容(通常是HTML,比如404/500错误页)导致的,结合你的代码和场景,潜在原因如下:

1. 单个学生API返回非JSON内容

虽然列表接口/students正常,但单个学生接口/students/${params.id}可能返回HTML(比如404错误页面)。常见触发场景:

  • params.id格式不符合后端要求:比如你在getStaticPaths中将d._id转为字符串,但后端期望原始的ObjectId格式(如MongoDB的ObjectId)或数字ID,导致接口找不到资源返回404 HTML。
  • 后端路由定义错误:比如后端单个学生路由是/student/:id而非/students/:id,请求路径不匹配返回404。

验证方法:直接在浏览器访问http://localhost:8080/students/[真实存在的学生ID],查看返回内容是否为JSON;也可以在getStaticProps中临时添加日志:

export async function getStaticProps({ params }) {
  const response = await fetch(`http://localhost:8080/students/${params.id}`);
  console.log('接口状态码:', response.status);
  console.log('返回原始内容:', await response.text()); // 打印返回的内容,确认是否为HTML
  const data = await response.json();
  // ...
}

2. getStaticProps存在语法错误

你的代码中return的props里有多余的无效字符S,,虽然不是直接导致JSON解析错误的原因,但会引发代码运行异常,建议立即删除该字符:

// 修正前
return {
  props: {
    data,
    S, // 无效字符,删除
  },
};

// 修正后
return {
  props: {
    data,
  },
};

3. ID传递过程中的格式丢失

如果你的d._id是MongoDB的ObjectId,toString()后会转为24位字符串,但部分后端框架可能需要将字符串重新转为ObjectId才能查询,若后端未处理字符串格式的ID,会导致查询失败返回错误HTML。

4. 服务器端临时错误

后端服务可能在处理单个学生请求时出现异常(如数据库查询错误),返回了包含错误信息的HTML页面而非JSON,此时需要检查后端服务的日志排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:01:06