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

React Native Expo调用Fantasy API报JSON输入意外结束错误求助

解决React Native Expo解析Fantasy API JSON时的SyntaxError问题

我帮你排查下这个SyntaxError: Unexpected end of JSON input的问题——这种错误一般是因为服务器返回的内容不是有效的JSON,或者响应在传输过程中被截断了。结合你说的Postman能正常获取、其他API用这段代码没问题的情况,可以试试下面几个方案:

1. 先排查原始响应内容

在直接解析JSON之前,先打印响应状态和原始文本,看看服务器到底返回了什么(比如是不是403、404这类错误页面,或者空内容)。修改你的代码如下:

fetch("https://fantasy.premierleague.com/api/bootstrap-static/", { 
  method: "GET", 
  headers: { 
    Accept: 'application/json', 
    'Content-Type': 'application/json', 
  }, 
}) 
.then((res) => { 
  console.log("响应状态码:", res.status);
  return res.text(); // 先获取原始文本,不要直接转JSON
}) 
.then((rawText) => { 
  console.log("原始响应内容:", rawText);
  try {
    const data = JSON.parse(rawText);
    console.log("解析后的数据: ", data);
  } catch (parseErr) {
    console.log("JSON解析错误详情:", parseErr);
  }
}) 
.catch((err) => { console.log("请求错误: " + err); });

如果打印出的是HTML页面或者非JSON内容,那说明服务器没有返回预期的响应,大概率是请求头的问题。

2. 移除多余的Content-Type请求头

GET请求不需要设置Content-Type(这个头是用来告诉服务器你发送的请求体格式的,而GET请求没有请求体)。有些API会对不必要的请求头敏感,试试去掉它:

fetch("https://fantasy.premierleague.com/api/bootstrap-static/", { 
  method: "GET", 
  headers: { 
    Accept: 'application/json', 
    // 删掉'Content-Type': 'application/json'这一行
  }, 
}) 
.then((res) => res.json())
.then((data) => console.log("DATA: ", data))
.catch((err) => console.log("Error: " + err));

3. 添加User-Agent请求头

很多API会验证请求的User-Agent字段,Postman默认会带上一个类似浏览器的User-Agent,而Expo的fetch可能用的是默认的原生客户端标识,导致服务器拒绝返回正确内容。试试加上一个常见的浏览器User-Agent:

fetch("https://fantasy.premierleague.com/api/bootstrap-static/", { 
  method: "GET", 
  headers: { 
    Accept: 'application/json', 
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
  }, 
}) 
.then((res) => res.json())
.then((data) => console.log("DATA: ", data))
.catch((err) => console.log("Error: " + err));

4. 检查Expo开发环境的网络配置

如果上面的方法都没用,可以检查下Expo的网络设置:

  • 对于Android,在app.json的android字段里添加"usesCleartextTraffic": true,确保允许HTTP请求(不过这个API是HTTPS的,可能不是这个问题);
  • 确认你的开发设备和Expo服务器在同一个网络下,没有代理或者防火墙拦截请求。

一般来说,添加User-Agent或者移除多余的Content-Type就能解决这个问题,因为Fantasy Premier League的API对请求头有一定的验证要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:42:56