Next.js 13.4.2 App目录API中request.json()语法错误求助
Next.js 13.4.2 App目录POST API路由
request.json()语法错误排查与解决 错误原因分析
SyntaxError: Unexpected token in JSON at position 0本质是请求的Body无法被解析为合法JSON,常见触发场景包括:
- 请求未携带
Content-Type: application/json头,或发送的Body格式不符合JSON规范(比如用单引号、存在尾逗号、键名未加引号等) - 请求Body为空或仅包含空白字符(空格、换行等)
- 实际发送的是表单数据(
application/x-www-form-urlencoded)而非JSON格式
对应解决方法
场景1:确保请求是合法JSON格式
- 检查请求端配置,必须添加请求头:
Content-Type: application/json - 验证发送的Body内容,严格遵循JSON语法:字符串、键名必须用双引号,避免尾逗号,禁止使用单引号包裹值或键
场景2:处理空/空白Body
修改API路由,先读取原始文本再安全解析,避免直接调用request.json()报错:
import { NextResponse } from "next/server"; export async function POST(request: Request) { const rawBody = await request.text(); let data = {}; if (rawBody.trim()) { try { data = JSON.parse(rawBody); } catch (err) { return NextResponse.json({ error: "无效的JSON格式" }, { status: 400 }); } } console.log(data); return NextResponse.json({ foo: "boo" }); }
场景3:处理表单提交请求
如果实际是表单提交(比如前端用form标签或application/x-www-form-urlencoded编码),改用request.formData()解析:
import { NextResponse } from "next/server"; export async function POST(request: Request) { const formData = await request.formData(); const data = Object.fromEntries(formData); console.log(data); return NextResponse.json({ foo: "boo" }); }
内容的提问来源于stack exchange,提问作者Chinmoy kr
相关产品推荐
相关产品推荐

