&引用;运行时错误';13';:“类型不匹配”;在VBA中使用JIRA API提取JSON
这里的社区是新来的。我已经做了相当多的编程,但我对VBA完全陌生。以前从未使用过它,直到现在,我的任务是将JSON数据从Jira API提取到Excel电子表格中。我一直收到错误“运行时错误'13:类型不匹配”,我不知道为什么。我知道这个错误与传入不正确的类型有关,但我尝试将Json变量更改为字符串,但没有成功。有人有什么想法吗?谢谢 顺便说一下,这只是一个测试API功能的Jira试用实例&引用;运行时错误';13';:“类型不匹配”;在VBA中使用JIRA API提取JSON,vba,excel,api,jira,Vba,Excel,Api,Jira,这里的社区是新来的。我已经做了相当多的编程,但我对VBA完全陌生。以前从未使用过它,直到现在,我的任务是将JSON数据从Jira API提取到Excel电子表格中。我一直收到错误“运行时错误'13:类型不匹配”,我不知道为什么。我知道这个错误与传入不正确的类型有关,但我尝试将Json变量更改为字符串,但没有成功。有人有什么想法吗?谢谢 顺便说一下,这只是一个测试API功能的Jira试用实例 Sub test() 'Authenticate the user Dim response As St
Sub test()
'Authenticate the user
Dim response As String
With CreateObject("Microsoft.XMLHTTP")
.Open "POST", "https://apitestsite.atlassian.net/rest/auth/1/session", False, "admin", "password"
.setRequestHeader "X-Atlassian-Token:", "nocheck"
.Send
response = .responseText
End With
'Query through JSON
Set MyRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
MyRequest.Open "GET", "https://apitestsite.atlassian.net/rest/api/2/issue/CC-1", False, "admin", "password"
MyRequest.Send
Dim Json As Object
Set Json = JsonConverter.ParseJson(MyRequest.responseText)
MsgBox Json("fields")("summary")
End Sub
更新:这就是我现在的处境。更新了身份验证的代码,现在编译器中没有显示错误。下面是我正在使用的JSONConverter类:github.com/VBA-tools/VBA-JSON/blob/master/JSONConverter.bas。现在的问题是返回的JSON字符串显示“{”errorMessages:[“问题不存在或您没有查看它的权限],“errors:{}”。因此,我能够很好地连接到Jira并以字符串形式返回JSON,只是Jira拒绝了我的凭据:/
Private JiraService As New MSXML2.XMLHTTP60
Private JiraAuth As New MSXML2.XMLHTTP60
Sub test()
'Authenticate the user
With JiraAuth
.Open "POST", "https://apitestsite.atlassian.net/rest/auth/1/session", False
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Accept", "application/json"
.setRequestHeader "X-Atlassian-Token:", "nocheck"
.send " {""username"" : ""admin"", ""password"" : ""password""}"""
sErg = .responseText
sCookie = "JSESSIONID=" & Mid(sErg, 42, 32) & "; Path=/Jira" '*** Extract the Session-ID
End With
With JiraService
Set MyRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
MyRequest.Open "GET", "https://apitestsite.atlassian.net/rest/api/2/issue/CC-1", False
MyRequest.setRequestHeader "Content-Type", "application/json"
MyRequest.setRequestHeader "Accept", "application/json"
MyRequest.setRequestHeader "Set-Cookie", sCookie '*** see Create a "Cookie"
MyRequest.send
Dim Json As String
Json = MyRequest.responseText
MsgBox Json
End With
End Sub
这似乎从API返回了一个有效的JSON,可以从
Jsonconverter
模块解析
您使用的MyRequest
对象可能是错误类型的对象。在其他地方,您依赖的是MSXML2.XMLHTTP60
类
Set MyRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
因此,我删除了MyRequest
,改为使用JiraService
对象。您在JiraService中有一个块,但实际上根本没有使用该对象,而是针对该块中的WinHttpRequest
对象执行
我还声明了所有变量,并修改了auth字符串以使用在模块顶部为user/password定义的Const
字符串
Option Explicit
Private JiraService As New MSXML2.XMLHTTP60
Private JiraAuth As New MSXML2.XMLHTTP60
Const user As String = "jiratestemail82@gmail.com"
Const pw As String = "password"
Sub test()
Dim sErg$, sCookie$, Json$
'Authenticate the user
With JiraAuth
.Open "POST", "https://apitestsite.atlassian.net/rest/auth/1/session", False
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Accept", "application/json"
.setRequestHeader "X-Atlassian-Token:", "nocheck"
.send " {""username"" : """ & user & """, ""password"" : """ & pw & """}"""
sErg = .responseText
sCookie = "JSESSIONID=" & Mid(sErg, 42, 32) & "; Path=/Jira" '*** Extract the Session-ID
End With
With JiraService
.Open "GET", "https://apitestsite.atlassian.net/rest/api/2/issue/CC-1", False
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Accept", "application/json"
.setRequestHeader "Set-Cookie", sCookie '*** see Create a "Cookie"
.send
Json = .responseText
End With
Dim j As Object
Set j = JsonConverter.ParseJson(Json)
MsgBox j("fields")("summary")
End Sub
这似乎从API返回了一个有效的JSON,可以从Jsonconverter
模块解析
您使用的MyRequest
对象可能是错误类型的对象。在其他地方,您依赖的是MSXML2.XMLHTTP60
类
Set MyRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
因此,我删除了MyRequest
,改为使用JiraService
对象。您在JiraService中有一个块,但实际上根本没有使用该对象,而是针对该块中的WinHttpRequest
对象执行
我还声明了所有变量,并修改了auth字符串以使用在模块顶部为user/password定义的Const
字符串
Option Explicit
Private JiraService As New MSXML2.XMLHTTP60
Private JiraAuth As New MSXML2.XMLHTTP60
Const user As String = "jiratestemail82@gmail.com"
Const pw As String = "password"
Sub test()
Dim sErg$, sCookie$, Json$
'Authenticate the user
With JiraAuth
.Open "POST", "https://apitestsite.atlassian.net/rest/auth/1/session", False
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Accept", "application/json"
.setRequestHeader "X-Atlassian-Token:", "nocheck"
.send " {""username"" : """ & user & """, ""password"" : """ & pw & """}"""
sErg = .responseText
sCookie = "JSESSIONID=" & Mid(sErg, 42, 32) & "; Path=/Jira" '*** Extract the Session-ID
End With
With JiraService
.Open "GET", "https://apitestsite.atlassian.net/rest/api/2/issue/CC-1", False
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Accept", "application/json"
.setRequestHeader "Set-Cookie", sCookie '*** see Create a "Cookie"
.send
Json = .responseText
End With
Dim j As Object
Set j = JsonConverter.ParseJson(Json)
MsgBox j("fields")("summary")
End Sub
哪一行引发了错误?另外,您可能希望包含JsonConverter
类的代码,因为大多数用户都无法正常引用。您是否检查了响应是否为预期结果?可能是由于错误状态而返回HTML响应?谢谢您的回复!编译器说错误发生在最后一行“msgboxjson(“fields”)(“summary”)”。我可能只是在错误地过滤JSON吗?我将用JsonConverter类更新我的问题。忽略上面的POSTMAN注释,只是想表明我用于代码的凭据可以访问API。就重新创建我的场景而言,我通过VBA提供的代码没有太多其他内容。如果您想访问Jira实例或应该显示的JSON,可以使用“jiratestemail82@gmail.com密码为“password”。从那里,您可以在另一个浏览器选项卡中键入“”,以查看该特定API调用的JSON。哪一行会引发错误?此外,您可能希望包含JsonConverter
类的代码,因为大多数用户都无法正常引用该类。如果响应是预期结果,您是否检查了响应?可能是由于错误状态而返回HTML响应?谢谢您的回复!编译器说错误发生在最后一行“msgboxjson(“fields”)(“summary”)”。我可能只是在错误地过滤JSON吗?我将用JsonConverter类更新我的问题。忽略上面的POSTMAN注释,只是想表明我用于代码的凭据可以访问API。就重新创建我的场景而言,我通过VBA提供的代码没有太多其他内容。如果您想访问Jira实例或应该显示的JSON,可以使用“jiratestemail82@gmail.com密码为“password”。从那里,您可以在另一个浏览器选项卡中键入“”,以查看该特定API调用的JSON。您太棒了!我很快就要让它工作了,但我想用错误的方法来解决它。也感谢您描述它的工作原理。非常感谢,非常感谢!你太棒了!我很快就要让它工作了,但我想用错误的方法来解决它。也感谢您描述它的工作原理。非常感谢,非常感谢!