如何让(“字段”)在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正常工作。