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

Express调用公开API时JSON解析报错,JSON已验证有效

Express调用外部API解析JSON时出现JSON解析错误的解决方法

问题原因

你遇到的「Unexpected end of JSON input」和「Unexpected token , in JSON at position X」错误,核心原因是**https.get的data事件是分块触发的**:外部API返回的响应数据会被拆分成多个片段,每次data回调拿到的d只是其中一段,不是完整的JSON字符串。直接对单片段做JSON.parse,自然会因为数据不完整导致解析失败——哪怕最终拼接后的完整JSON是有效的。

修复方案

需要先把所有分块数据拼接起来,等到end事件触发(表示所有数据接收完成)后,再执行JSON解析。修改你的characters路由代码如下:

const express = require('express');
const https = require('https');
const router = express.Router();

const api = 'https://www.cheapshark.com/api/1.0/games?title=batman&steamAppID=35140&limit=60&exact=0';

router.get("/", function(req, res) {
    https.get(api, (response) => {
        console.log(response.statusCode);
        // 初始化变量存储完整响应数据
        let rawData = '';

        // 分块接收数据并拼接
        response.on('data', (chunk) => {
            rawData += chunk;
        });

        // 所有数据接收完成后执行解析
        response.on('end', () => {
            try {
                const data = JSON.parse(rawData);
                console.log(data);
                res.send(data);
            } catch (err) {
                console.error('JSON解析失败:', err);
                res.status(500).send('数据解析错误');
            }
        });

        // 处理请求过程中的错误
        response.on('error', (err) => {
            console.error('请求外部API失败:', err);
            res.status(500).send('请求外部数据失败');
        });
    })
})

module.exports = router;

额外优化建议

  • 增加状态码校验:如果外部API返回非200状态码(如404、500),可提前终止流程,避免解析无效数据
  • 指定编码格式:如果外部API返回非UTF-8编码的数据,需通过response.setEncoding('utf8')明确指定编码,避免乱码问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:15:58