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

ReactJS页面调用API时出现JSON输入意外结束错误求助

解决React中fetch请求出现"Unexpected end of JSON input"的问题

我来帮你一步步排查这个问题,这种JSON解析错误通常是由代码语法问题、请求地址不匹配或者响应内容异常导致的,我们逐个解决:

  • 先补全你的代码语法错误
    你提供的代码里this.setState(...明显没写完,这会直接导致语法错误,进而引发后续的异常。正确的写法应该是:

    componentDidMount() {
      fetch(this.state.url)
        .then(response => response.json())
        .then(data => this.setState({ data })) // 完整设置state
        .catch(error => console.error('请求出错:', error)); // 一定要加catch捕获错误
    }
    
  • 确认请求的API地址是否正确
    你提到Postman测试的是返回[ { "clientI": "FedEx KinKOs" } ]的API,但代码里的url却是https://jsonplaceholder.typicode.com/todos,这两个地址完全不匹配!如果你的目标是调用自己测试的那个API,一定要把url改成你实际测试的接口地址,不然fetch请求的是错误的接口,返回的数据格式和预期不符,就会触发JSON解析失败。

  • 添加HTTP错误处理逻辑
    fetch的特性是:只有当网络请求彻底失败(比如断网)时才会reject;如果是HTTP错误(比如404、500状态码),fetch依然会resolve,但此时返回的响应不是有效的JSON,调用response.json()就会报错。所以你需要在处理响应前先判断请求是否成功:

    componentDidMount() {
      fetch(this.state.url)
        .then(response => {
          // 检查请求是否成功
          if (!response.ok) {
            throw new Error(`请求失败,状态码: ${response.status}`);
          }
          return response.json();
        })
        .then(data => this.setState({ data }))
        .catch(error => console.error('获取数据失败:', error));
    }
    
  • 验证API返回的响应内容
    有时候Postman显示的是格式化后的结果,但实际接口返回的可能有多余的字符、换行或者非JSON内容。你可以打开浏览器的开发者工具(F12),切换到Network面板,找到这个fetch请求,查看Response标签里的原始内容,确认它是标准的JSON格式。

按照上面的步骤排查,应该就能解决这个问题了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:52:42