Excel VBA-JSON:如何遍历JSON对象中的error数组?
解决VBA-JSON遍历error数组时的"要求对象"错误
使用VBA-JSON解析包含error数组的JSON响应时,执行Set jsonObject = ParseJson(result)正常,但遍历error数组的For Each循环触发错误424“要求对象”。需要修正遍历逻辑来正确展示验证错误。
示例JSON响应
{"fileName": "Batch_01032023_SakerItemData.xlsx", "fileLocation": "C:\\Temp", "message": "There are 3 errors. Please correct and try again.", "error": [ "{Item} failed validation:Item is required.:8", "{Type} failed validation:Type is required.:8", "{Class} failed validation:Class is required.:8" ] }
问题代码片段
Dim jsonObject As Object, item As Object ... Set jsonObject = ParseJson(result) *** 此处遍历error数组的正确语法是什么? **** For Each item In jsonObject("error")(1) Next
正确解决方案
你的代码存在两个关键问题:
- 错误地取了数组的第一个元素
jsonObject("error")(1),而非遍历整个error数组; - 将
item定义为Object,但数组中的元素是字符串类型,并非对象。
修正后的代码如下:
Dim jsonObject As Object Dim errorItem As Variant ' 用Variant兼容字符串类型 Set jsonObject = ParseJson(result) ' 直接遍历整个error数组 For Each errorItem In jsonObject("error") ' 示例:弹出每个错误信息 MsgBox errorItem ' 也可将错误信息写入单元格或文本框 ' Sheet1.Cells(Sheet1.Rows.Count, 1).End(xlUp).Offset(1, 0).Value = errorItem Next errorItem
若想更清晰地拆分逻辑,也可先单独获取数组对象:
Dim jsonObject As Object Dim errorList As Object Dim errorItem As Variant Set jsonObject = ParseJson(result) Set errorList = jsonObject("error") For Each errorItem In errorList MsgBox errorItem Next errorItem
关键说明
- VBA-JSON解析后的数组是
Collection类型,直接通过jsonObject("error")即可获取整个集合,无需添加索引; - 数组内的元素是字符串,需用
Variant或String类型接收,不能用Object,否则会触发“要求对象”错误。
内容的提问来源于stack exchange,提问作者PEBKAC
相关产品推荐
相关产品推荐

