在VBA中解析JSON对象

在VBA中解析JSON对象,json,vba,jscript,Json,Vba,Jscript,我正在VBA中解析JSON对象。我在这个论坛上找到了一个非常有用的代码示例。但是,对象中的一个字段是“total”。在我的代码中,我试图得到总数,但是“总数”被切换到“总数”。我在运行时得到一个错误438。以下是代码snipit: Dim Issues As Object Dim scriptControl As Object Set scriptControl = CreateObject("MSScriptControl.ScriptControl") scriptControl.Lang

我正在VBA中解析JSON对象。我在这个论坛上找到了一个非常有用的代码示例。但是,对象中的一个字段是“total”。在我的代码中,我试图得到总数,但是“总数”被切换到“总数”。我在运行时得到一个错误438。以下是代码snipit:

Dim Issues As Object
Dim scriptControl As Object

Set scriptControl = CreateObject("MSScriptControl.ScriptControl")
scriptControl.Language = "JScript"

Set ObjHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")

URL = "http://<url>.com:10005/rest/api/2/search"

ObjHTTP.Open "POST", URL, False
ObjHTTP.SetRequestHeader "Authorization", "Basic <userid / password>"
ObjHTTP.SetRequestHeader "Content-Type", "application/json"

'Get the new work intake for the month.
ObjHTTP.send ("{""jql"":""<my query here>"":[""id""],""maxResults"":1}")
strX = ObjHTTP.responsetext
Set Issues = scriptControl.Eval("(" + strX + ")")

With Sheets("Test")
    .Cells(1, 1) = Issues.expand  --this works
    .Cells(1, 2) = Issues.startAt --this works
    .Cells(1, 3) = Issues.maxResults -- this works
    .Cells(1, 4) = Issues.Total  -- JSON object is "total"  editor keeps switching to "Total"
End With
Dim问题作为对象
将脚本控件作为对象
设置scriptControl=CreateObject(“MSScriptControl.scriptControl”)
scriptControl.Language=“JScript”
设置ObjHTTP=CreateObject(“WinHttp.WinHttpRequest.5.1”)
URL=”http://.com:10005/rest/api/2/search"
ObjHTTP.Open“POST”,URL,False
ObjHTTP.SetRequestHeader“授权”、“基本”
ObjHTTP.SetRequestHeader“内容类型”、“应用程序/json”
“获得本月的新工作录取。
ObjHTTP.send(“{”“jql”“:”“:[”“id”“],”“maxResults”“:1}”)
strX=ObjHTTP.responsetext
Set Issues=scriptControl.Eval(“+strX+”)
附页(“测试”)
.Cells(1,1)=Issues.expand--这是有效的
.Cells(1,2)=Issues.startAt--这是有效的
.Cells(1,3)=Issues.maxResults--这是有效的
.Cells(1,4)=Issues.Total--JSON对象为“Total”,编辑器一直切换到“Total”
以

有人知道我为什么不能使用Issues.total吗?

借用链接问题,类似这样的方法应该可以:

'.... 
strX = ObjHTTP.responsetext
scriptControl.Eval("var o = (" + strX + ");")
scriptControl.AddCode "function getProp(propName) { return o[propName]; } "

With Sheets("Test")
    .Cells(1, 1) = scriptControl.Run("getProp", "expand")  
    .Cells(1, 2) = scriptControl.Run("getProp", "startAt")
    .Cells(1, 3) = scriptControl.Run("getProp", "maxResults")
    .Cells(1, 4) = scriptControl.Run("getProp", "total")
End With

尽管如此,您还是应该使用以下代码:

VBA是一种不区分大小写的语言,JScript对象
Issues
是区分大小写的。使用
CallByName(Issues,“total”,vbGet)
或使用a:
Issues(“total”)
。感谢您的回复。这成功了!这正是我需要的。@Omegalipes-谢谢你的修复