You need to enable JavaScript to run this app. 使用VBA-JSON库解析JSON响应无法访问元素及遍历问题
优惠活动
大模型
产品
解决方案
定价
更多

使用VBA-JSON库解析JSON响应无法访问元素及遍历问题

问题原因

首先明确 VBA-JSON 库的转换规则:

  • JSON 键值对对象({}包裹结构)会被转换为Scripting.Dictionary类型,仅支持字典对象("键名")的方式取值,不支持点语法直接访问属性
  • JSON 数组([]包裹结构)会被转换为Collection集合类型,通过集合对象(索引)取值,索引从1开始计数

你触发报错的核心原因有两个:

  1. 访问了不存在的键:你示例的JSON结构里没有顶级键dict_pDictionary,直接调用JsonPayload("dict_pDictionary")会触发不存在键的错误
  2. 错误使用点语法:类似e.shortName、e.dict_pDictionary的写法不符合Dictionary的调用规则,Dictionary没有对应内置属性,会直接报错
正确实现代码

单个元素取值示例

Dim JsonPayload As Object
Set JsonPayload = JsonConverter.ParseJson(req.ResponseText)

' 取第一个员工的employeeId内的id值
MsgBox JsonPayload("employees")(1)("employeeId")("id")
' 取第一个员工的shortName值
MsgBox JsonPayload("employees")(1)("shortName")

遍历所有员工示例

Dim JsonPayload As Object
Set JsonPayload = JsonConverter.ParseJson(req.ResponseText)

' 先获取employees对应的集合
Dim empList As Collection
Set empList = JsonPayload("employees")

Dim emp As Dictionary
For Each emp In empList
    ' 所有属性都通过("键名")方式访问
    Debug.Print "员工ID", emp("employeeId")("id")
    Debug.Print "员工编号", emp("personNumber")
    Debug.Print "员工简称", emp("shortName")
Next
补充注意事项
  • 提前引用Microsoft Scripting Runtime可避免类型声明报错,用迟绑定的话可以把Dictionary、Collection都替换为Object
  • 不确定节点类型时可以用TypeName(JsonPayload("键名"))打印判断是Dictionary还是Collection,再对应处理
  • 遇到可选键的场景,可以先调用字典的Exists方法判断键是否存在,示例:If emp.Exists("shortName") Then Debug.Print emp("shortName")

结构参考示意图

示意图1
示意图2

内容的提问来源于stack exchange,提问作者Ray Bond

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 13:45:03