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

NextResponse.json疑似破坏JSON语法:修改ID后客户端无法解析响应

Next.js 13.5.3 API路由JSON解析错误排查方案
  • 强制设置正确响应头
    手动修改响应数据后,Next.js可能未自动配置正确的Content-Type,导致客户端解析异常。显式设置响应头:

    export async function GET() {
      const cmsRes = await fetch('你的CMS接口地址');
      const rawData = await cmsRes.json();
      // 处理ID(哈希或转字符串)
      const modifiedData = { ...rawData, id: String(rawData.id) };
      return new Response(JSON.stringify(modifiedData), {
        headers: { 'Content-Type': 'application/json' },
      });
    }
    
  • 校验未修改字段的合法性
    错误指向tagging字段,即使没手动修改,也可能存在隐性问题:

    • 检查tagging是否包含未转义的特殊字符(如引号、换行)
    • 验证CMS返回的tagging本身是否是合法JSON结构(比如逗号遗漏、括号不匹配)
    • 单独提取tagging字段,用JSON.parse()测试能否正常解析
  • 避免直接修改原始对象
    直接修改CMS返回的原始对象可能触发原型链或隐藏属性问题,建议创建全新对象:

    const modifiedData = {
      ...rawData,
      id: String(rawData.id), // 替换为你的哈希逻辑
      tagging: { ...rawData.tagging } // 显式复制嵌套字段
    };
    return Response.json(modifiedData);
    
  • 对比序列化前后的内容
    控制台打印的对象和实际序列化的JSON字符串可能存在差异,比如不可枚举属性或循环引用。在API路由中打印序列化后的字符串,和客户端Network面板的响应内容对比:

    const jsonStr = JSON.stringify(modifiedData);
    console.log(jsonStr); // 确保和客户端收到的响应完全一致
    return new Response(jsonStr, { headers: {'Content-Type': 'application/json'} });
    
  • 优先使用内置Response.json()
    Next.js的Response.json()会自动处理头信息和序列化逻辑,减少手动操作的错误:

    return Response.json(modifiedData);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:47:36