POST请求发送JSON数组报cannot unmarshal array错误该如何解决
问题修复方案
报错核心原因:该API的后端是Go语言开发,/users接口期望接收的请求体是单个models.UserRequest类型的JSON对象,但你当前直接将Excel解析得到的JSON数组作为请求体提交,类型不匹配导致反序列化失败。
方案1:单条循环提交(适配现有单用户创建接口)
如果/users接口仅支持单次创建一个用户,你需要遍历解析出的用户数组,逐个构造请求提交:
import fetch from 'node-fetch'; import xlsx from 'xlsx'; const baseUrl = ""; const apiToken = ""; const accountId = ""; const wb = xlsx.readFile('users.xlsx'); const ws = wb.Sheets['users']; const data = xlsx.utils.sheet_to_json(ws); // 封装单个用户创建请求 const createSingleUser = async (user) => { const options = { method: "POST", headers: { Authorization: `Bearer ${apiToken}`, "gtmhub-accountid": accountId, "Content-type": "application/json; charset=UTF-8", Accept: "application/json, text/plain, */*", }, body: JSON.stringify(user) }; try { const res = await fetch(`${baseUrl}/users`, options); const resData = await res.text(); console.log(`用户创建结果:`, resData); } catch (err) { console.log(`用户创建失败:`, err.message); } } // 遍历批量提交,可根据接口限流规则调整提交间隔 const batchCreateUsers = async () => { for (let user of data) { await createSingleUser(user); // 可选配置:增加提交延迟避免触发接口限流 // await new Promise(resolve => setTimeout(resolve, 100)) } } batchCreateUsers();
方案2:适配批量创建接口(如果服务端支持)
如果服务端提供了专门的批量创建用户接口,你需要先确认接口的请求规则:
- 如果接口路径为
/users/batch这类专用路径,且要求数组作为顶级请求体,直接替换请求的目标路径即可 - 如果接口要求数组嵌套在指定字段中,按照要求调整请求体结构即可,示例如下:
body: JSON.stringify({ user_list: data })
内容的提问来源于stack exchange,提问作者codePanda
相关产品推荐
相关产品推荐

