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

VBA解析嵌套JSON提取Price时触发type mismatch错误,求排查

解决VBA JsonConverter提取Price时的类型不匹配错误

嘿,我一眼就看出问题出在哪了——你遍历parsedResult("From")的时候,拿到的Item其实是每个口味的名称(比如"Chocolate"、"Lime"这种字符串),而不是包含Price的子对象!直接对字符串用Item("Price")肯定会触发类型不匹配,因为字符串根本没有这种访问方式。

咱们来修正一下代码,两种写法都可以,选你觉得顺手的:

写法1:遍历键名,通过键名取值

Dim result As String
Dim flavorName As Variant ' 改个更直观的变量名,明确是口味名称
Dim parsedResult As Object
Dim flavorData As Object ' 存From对应的字典
Dim i As Long
Dim ws As Worksheet

result = objHTTP.responseText
Set ws = Worksheets("Sheet1")
Set parsedResult = JsonConverter.ParseJson(result)
Set flavorData = parsedResult("From") ' 把From的字典单独拿出来,代码更清晰
i = 1

For Each flavorName In flavorData
    ' 通过键名获取对应的子对象,再提取Price
    ws.Cells(i, 2) = flavorData(flavorName)("Price")
    ' 顺便把口味名称写到A列,方便对应查看
    ws.Cells(i, 1) = flavorName
    i = i + 1
Next

写法2:直接遍历值集合

如果你不想处理键名,也可以直接遍历From字典里的值集合,这样每个循环拿到的就是包含Price的子对象:

Dim result As String
Dim itemData As Variant
Dim parsedResult As Object
Dim flavorData As Object
Dim i As Long
Dim ws As Worksheet

result = objHTTP.responseText
Set ws = Worksheets("Sheet1")
Set parsedResult = JsonConverter.ParseJson(result)
Set flavorData = parsedResult("From")
i = 1

For Each itemData In flavorData.Items ' 这里用.Items直接遍历值
    ws.Cells(i, 2) = itemData("Price")
    i = i + 1
Next

为啥原来的代码会报错?

JsonConverter解析你的JSON后,parsedResult("From")是一个Dictionary对象。当你直接用For Each Item In [Dictionary]时,默认遍历的是这个字典的键集合(也就是所有的口味名称字符串),而不是键对应的子对象。这就是你触发类型不匹配的核心原因——你试图对字符串调用字典的访问语法,当然行不通啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:30:14