如何让(“字段”)在VBA-JSON中工作

概要

我试图访问我目前正在使用的API的深层嵌套JSON。 通过这个过程使用VBA-JSON非常简单,但我遇到了一个小小的障碍。 在大多数情况下,我已经有了这个库可以正常工作,但是当我尝试抓取嵌套在JSON响应中的项目( 超过2个JSON级别 )时,我得到一个错误。 我将提交这个post,然后我会去收集一些我得到的错误代码。 closures我的头顶,我知道当我尝试使用下面的代码无法运行时,运行时错误为'13' 。 我认为( 可能是错误的 ),我很聪明,以了解types不匹配的错误,但我不知道如何解决它。

这工作

For i = 1 To 20 ActiveSheet.Cells(i + 1, 5) = Json("issues")(i)("key") ActiveSheet.Cells(i + 1, 6) = Json("issues")(i)("id") Next 

不起作用

 For i = 1 To 20 ActiveSheet.Cells(i + 1, 7) = Json("fields")(i)("summary") Next 

这些没有任何工作

 ActiveSheet.Cells(i + 1, 7) = Json("fields")(i)("summary") ActiveSheet.Cells(i + 1, 7) = Json("fields")("summary") ActiveSheet.Cells(i + 1, 7) = Json("issues")("fields")("summary") ActiveSheet.Cells(i + 1, 7) = Json("fields")("assignee")(i)("name") ActiveSheet.Cells(i + 1, 7) = Json("issues")("fields")("assignee")(i)("name") 

用一些JSON更新

我编辑了出于隐私原因返回的JSON( 显然 )。

 { "expand": "schema,names", "startAt": 0, "maxResults": 50, "total": 28, "issues": [ { "expand": "", "id": "94581", "self": "", "key": "", "fields": { , "assignee": {} , "status": {} , "votes": {} , "summary": "" , , "issuetype": {} , "timespent": null, } } , {} , {} , {} ] } 

根据这个数据结构,我的代码应该看在正确的地方,对吗?

思考? 🙂


PS:对不起,如果行话是closures的,我是一个开发人员的爱好,而不是工作。 🙂

问题

嵌套数组实际上是问题。 JSON项目的第二层不是数组,而“字段”是。

为了解决这个问题,我们需要在代码中添加一个(i + 1)。

工作代码示例

 '''''''' ' Loop ' '''''''' For i = 1 To 20 ActiveSheet.Cells(i + 1, 5) = Json("issues")(i)("key") ActiveSheet.Cells(i + 1, 6) = Json("issues")(i)("id") ActiveSheet.Cells(i + 1, 7) = Json("issues")(i + 1)("fields")("summary") ActiveSheet.Cells(i + 1, 8) = Json("issues")(i + 1)("fields")("watches")("watchCount") ActiveSheet.Cells(i + 1, 9) = Json("issues")(i + 1)("fields")("workratio") Next 

更新:(

所以,我得到了所有的代码设置来运行我的报告,这是工作,然后它随机停止( 我看着它在16行左右 ),并给我另一个types不匹配的错误。

1-15行如何工作,然后突然出现types不匹配错误?

大声笑…

正在debugging…

更新2 🙂

简单的与代码结构混淆,没有问题,我在下面发布的解决scheme正常工作。