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

使用Google Apps Script的UrlFetchApp调用API时遇JSON类型转换错误

解决org.json.simple.JSONArray cannot be cast to org.json.simple.JSONObject错误

这个错误的核心逻辑很清晰:你的代码里把API返回的JSON数组(JSONArray)当成了JSON对象(JSONObject)来处理,要么是请求格式不符合API要求导致返回了异常响应,要么是后续解析处理时搞错了数据类型。结合你的代码,我们一步步拆解问题:

1. 先排查请求Payload的格式问题

看你的代码,EventData是一个数组:

var EventData=[{ "StartDate": "07/22/2019 09:00", "EndDate": "07/29/2019 17:00", "VenueId": [12312312] }];

然后你直接把这个数组转成JSON字符串作为请求体发送:

"payload":JSON.stringify(EventData)

绝大多数POST API要求接收JSON对象而非数组作为请求体(比如会要求把数据包裹在{"data": ...}这类结构里)。如果API期望的是对象,但你发送了数组,它很可能返回格式异常的数组响应,进而触发类型转换错误。

建议你先核对目标API的文档,确认请求体的正确格式。比如如果API要求对象格式,你需要把数组包裹到对象中:

var EventData = {
  "events": [{ 
    "StartDate": "07/22/2019 09:00", 
    "EndDate": "07/29/2019 17:00", 
    "VenueId": [12312312] 
  }]
};

再重新生成Payload发送请求。

2. 检查响应的解析与后续处理逻辑

假设API确实返回的是JSON数组(比如多个场馆数据的集合),那JSON.parse(resp.getContentText())得到的RespObj就是一个数组。如果你后续代码里尝试像访问对象属性一样操作它(比如RespObj.venueName),必然会触发类型转换错误。

你可以先把响应内容打印出来,明确它的真实结构:

var respText = resp.getContentText();
console.log("API响应内容:", respText);
var RespObj = JSON.parse(respText);

如果打印结果是数组(比如[{"venueId":123,...}, {...}]),那你需要用数组的方式处理它,比如遍历:

for (var i = 0; i < RespObj.length; i++) {
  var venue = RespObj[i];
  console.log("场馆ID:", venue.VenueId);
}

3. 排查API返回的错误响应

如果请求格式不正确,API可能会返回包含错误信息的数组(而非预期的正常对象),这也会导致这个错误。所以第一步打印响应内容非常关键,能帮你快速定位是请求格式问题,还是响应处理逻辑问题。

总结一下排查步骤:

  • 打印API响应内容,确认它的实际结构是数组还是对象
  • 对照API文档,校验请求体格式是否符合要求
  • 根据响应的真实结构调整后续代码:数组就用数组的方式操作,对象就用对象的方式访问属性

内容的提问来源于stack exchange,提问作者Mukundha CHar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:12:16