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
相关产品推荐
相关产品推荐

