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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:05:00