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

Express对接Mailchimp出现JSON意外结束语法错误求排查

解决Mailchimp订阅功能的JSON解析错误问题

我跟着Angela Yu的课程编写了一段实现用户订阅Mailchimp功能的Express代码,运行时出现「Syntax error: unexpected end of JSON input」错误。尝试添加逗号等操作仍无法解决,恳请提供帮助与调试建议。

代码如下:

const express = require("express");
const bodyp = require("body-parser");
const request = require("request");
const https = require("https");    
const app = express();
app.use(express.static("public"));
app.use(bodyp.urlencoded({ extended: true }));

app.get("/", function(req, res){
    res.sendFile(__dirname + "/signup.html");
});

app.post("/", function(req, res){
    const finame = req.body.fname;
    const laname = req.body.lname;
    const mail = req.body.email;

    const data = {
        members: [
            {
                email_address: mail,
                status: "subscribed",
                merge_fields: {
                    FNAME: finame,
                    LNAME: laname
                },
            },
        ],
    };

    const jsondata = JSON.stringify(data);

    const url = "https://us21.api.mailchimp.com/3.0/lists/d07ffaae94";

    const options = {
        method:"post",
        auth:"XXXXXXXXXXX"
    };

    const request = https.request(url, options, function(response){
        if(response.statusCode === 200){
            res.sendFile(__dirname + "/success.html");
        }
        else{
            res.sendFile(__dirname + "/failure.html");
        }

        response.on("data", function(data){
            console.log(JSON.parse(data));
        });
    });

    request.write(jsondata);
    request.end();
});

app.post("/failure", function(req, res){
    res.redirect("/");
});

app.listen(3000, function(){
    console.log("Server is running on port 3000.");
}); 

调试建议及解决方法

  • 清理JSON冗余逗号:JS允许对象/数组末尾加逗号,但转换成JSON后可能触发解析错误。修改data对象,去掉所有多余的尾逗号:
    const data = {
        members: [
            {
                email_address: mail,
                status: "subscribed",
                merge_fields: {
                    FNAME: finame,
                    LNAME: laname
                }
            }
        ]
    };
    
  • 正确拼接响应数据:response.on("data")会分次返回响应内容,单次解析会得到不完整的JSON。改成先拼接所有数据再解析:
    let responseData = "";
    response.on("data", function(chunk){
        responseData += chunk;
    });
    response.on("end", function(){
        if(responseData){
            try {
                console.log(JSON.parse(responseData));
            } catch (err) {
                console.error("JSON解析失败:", err);
            }
        }
    });
    
  • 修正认证格式:Mailchimp的auth字段需要遵循"任意用户名:API密钥"的格式,比如"user123:your-mailchimp-api-key",检查你的auth值是否符合要求。
  • 添加请求头:发送JSON数据时必须指定Content-Type,在options中补充:
    const options = {
        method: "post",
        auth: "yourUsername:yourApiKey",
        headers: {
            "Content-Type": "application/json"
        }
    };
    
  • 验证API端点信息:确认URL中的服务器编号(us21)和列表ID(d07ffaae94)与Mailchimp后台完全一致,错误的列表ID会返回异常响应,导致JSON解析失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 15:13:39