aspJSON加载JSON报Clng溢出及多条记录遍历错误求助
aspJSON 1.19 版本溢出及遍历报错解决方案
1. 修复Overflow: 'Clng'报错
报错根因为1.19版本的aspJSON使用Clng函数处理JSON中的数值,VBA中Clng仅支持-2147483648~2147483647范围的数值,超出范围(比如大ID、时间戳)就会触发溢出。
修复步骤:
- 打开aspJSON1.19.asp文件,定位到第265行
- 将行内的
Clng函数替换为CDbl,CDbl支持更大的数值范围,可兼容绝大多数JSON数值场景。
2. 修复遍历第二条数据时报Object required报错
报错根因为遍历数组的方式错误,若使用For Each遍历aspJSON的数组对象,会同时遍历内部私有属性,导致第二次循环时取到的索引无效,无法获取到对应元素。
正确的数组遍历写法如下:
Set oJSON = New aspJSON ' 传入你已校验有效的JSON字符串 oJSON.loadJSON(jsonStr) ' 提前缓存events数组对象,避免重复查找 Set eventsArr = oJSON.data("events") ' 数组索引从0开始,遍历范围为0到数组长度减1 For i = 0 To eventsArr.Count - 1 Set currentEvent = eventsArr.item(i) ' 获取当前记录id eventId = currentEvent.data("id") ' 获取当前记录全量JSON字符串 fullEventData = currentEvent.Serialize() ' 此处写入你的业务处理逻辑 ' Response.Write "ID:" & eventId & ", 数据:" & Server.HTMLEncode(fullEventData) & "<br>" Next ' 销毁对象释放内存,适配数千条数据的内存占用需求 Set currentEvent = Nothing Set eventsArr = Nothing Set oJSON = Nothing
3. 数千条数据场景优化建议
- 若JSON中存在超大数值(超过16位),可在生成JSON的上游将数值类型的id转为字符串类型,彻底避免数值解析溢出问题
- 遍历过程中不要重复调用
oJSON.data("events"),提前将数组赋值给局部变量可提升遍历性能 - 处理完单条数据后及时释放临时对象的引用,避免内存占用过高
内容的提问来源于stack exchange,提问作者Dennis
相关产品推荐
相关产品推荐

