You need to enable JavaScript to run this app. app.js中fetch请求偶现JSON解析报错:位置0意外出现token C
优惠活动
大模型
产品
解决方案
定价
更多

app.js中fetch请求偶现JSON解析报错:位置0意外出现token C

偶发JSON解析报错的根因与修复

报错本质

SyntaxError: Unexpected token C in JSON at position 0 是response.json()解析阶段抛出的语法错误:合法JSON响应的起始字符只会是{或[,现在解析的内容从第0位就出现了大写字母C,说明接口根本没有返回预期的标准JSON结构。
结合“偶发触发、无稳定复现规律”的特征,常见触发场景有三类:

  • RapidAPI侧触发接口限流、上游数据源连接异常时,不会返回标准化JSON格式的错误信息,而是直接返回纯文本提示,比如Could not reach upstream data source、Invalid country parameter,这类文本的首字母恰好为C,直接引发解析失败
  • 拼接URL时未对user_country参数做URI编码,当传入的国家名称带空格、特殊符号时,接口会返回纯文本格式的校验错误,破坏JSON返回的预期结构
  • 网络波动导致响应内容截断,拿到的不完整片段恰好以C字符开头

修复实现

不要跳过响应校验直接执行JSON解析,需补充两类防御逻辑:

  • 对入参做URI编码,避免特殊字符引发的请求异常
  • 先校验响应的内容类型,确认是JSON格式后再执行解析;遇到非JSON返回时,读取原始响应文本抛出可溯源的错误

参考修复后的代码:

function fetchData(user_country) {
  // 对拼接参数做URI编码,避免特殊字符干扰请求
  const encodedCountry = encodeURIComponent(user_country)
  fetch(`https://covid19-monitor-pro.p.rapidapi.com/coronavirus/cases_by_days_by_country.php?country=${encodedCountry}`, {
    "method": "GET",
    "headers": {
      "x-rapidapi-key": "0eb507ba94mshbdcee33e20f63e2p1f00eajsn1967cf2bd741",
      "x-rapidapi-host": "covid19-monitor-pro.p.rapidapi.com"
    }
  })
  .then(async response => {
    // 校验响应内容类型,避免非JSON内容直接解析报错
    const contentType = response.headers.get('content-type')
    if (!contentType?.includes('application/json')) {
      const rawResponse = await response.text()
      throw new Error(`接口返回非JSON内容,原始响应:${rawResponse},HTTP状态码:${response.status}`)
    }
    return response.json();
  })

注意:示例代码中硬编码的RapidAPI密钥不要直接暴露在前端生产代码中,避免被恶意盗用消耗API额度


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.12 21:45:09