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

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

正确解决方案

你的代码存在两个关键问题:

  1. 错误地取了数组的第一个元素jsonObject("error")(1),而非遍历整个error数组;
  2. 将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:05:59