概括
我正在尝试访问从我目前正在使用的 API 返回的深层嵌套 JSON。使用 VBA-JSON通过这个过程非常容易,但我遇到了一个小障碍。在大多数情况下,我已经让这个库正常工作,但是每当我尝试抓取嵌套在 JSON 响应中的项目(超过 2 个 JSON 级别)时,我都会收到错误消息。我将提交这篇文章,然后我会去收集一些我得到的错误代码。在我的脑海中,我知道我得到了 Run-time error '13'当我尝试使用下面的代码时不起作用。我认为(可能是错误的)我足够聪明,可以理解类型不匹配错误,但我不知道如何解决它。
这个作品
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:对不起,如果行话被关闭,我是一个爱好的开发人员,而不是工作。 :)
最佳答案
问题
嵌套数组实际上是问题所在。 JSON 项目的第 2 级不是数组,而“字段”是。
为了解决这个问题,我们需要在代码中添加一个 (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 行左右看到它这样做)并给我另一个类型不匹配错误。
第 1-15 行是如何工作的,然后突然出现类型不匹配错误?
哈哈...
现在调试...
更新 2 :)
简单地与代码结构混合,没有问题,我在下面发布的解决方案可以正常工作。
关于json - 如何获取 ("fields")在 VBA-JSON 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46205368/