VBA POST json到API

时间:2015-03-12 16:28:22

标签: json excel vba excel-vba http-post

我正在尝试编写VBA以将json发布到api并将结果解析为工作表。我可以生成JSON,并且我相信我可以将结果解析为我需要的内容。

我知道有一些在线工具可以将json转换为vba并返回浏览器并添加ins来发布请求,但我是办公室里唯一可以这样做的人,所以如果我生病或休假我想自动化它。要做到这一点,我需要发送json并可能存储响应,以便我可以解析它。

我是编码的新手,所以发布这样的请求是我的头脑。 到目前为止,我有以下代码来编写json。我很感激帮助我入门。如果需要,我可以发布json的样本或者我想发布的api。

对于糟糕的代码道歉我知道我可以改进它但是想要获得json响应,因为我认为它将是最具挑战性的部分。

编辑已经取得了一些进展。现在可以将JSON字符串发送到URL并获取响应。然而,它总是会失败:

“{   “”message“”:“”发生错误。“” }“

如果我使用httpRequestor手动发送json,则会正确返回结果。 这似乎表明,代码中的某个地方JSON在发布时会以某种方式混淆或修改。

以下更新的代码。 (删除了对实际数据的任何引用)

编辑2修复并正常工作。 从

中删除了引号

objHTTP.send(“Json”)

    Private Sub CommandButton21_Click()

Dim h_1 As String
Dim h_2 As String

h_1 = Range("A1")
h_2 = Range("B1")
h_3 = Range("C1")
h_4 = Range("D1")
h_5 = Range("E1")
h_6 = Range("F1")

sv_1 = 2
sv_2 = 2
sv_3 = 2
sv_4 = 2
sv_5 = 2
sv_6 = 2

For f = 15 To 21
v_1 = Range("A" & sv_1)
v_2 = Range("B" & sv_2)
v_3 = Range("C" & sv_3)
v_4 = Range("D" & sv_4)
v_5 = Range("E" & sv_5)
v_6 = Range("F" & sv_6)
y = "[{""" & h_1 & """:""" & v_1 & """,""" & h_2 & """:""" & v_2 & """,""" & h_3 & """:""" & v_3 & """,""" & h_4 & """:""" & v_4 & """,""" & h_5 & """:""" & v_5 & """,""" & h_6 & """:""" & v_6 & """ }]"

Range("A" & f).Value = y
sv_1 = sv_1 + 1
sv_2 = sv_2 + 1
sv_3 = sv_3 + 1
sv_4 = sv_4 + 1
sv_5 = sv_5 + 1
sv_6 = sv_6 + 1
Next f





    Dim objHTTP As Object
    Dim Json As String
    Json = Range("A15")
    Dim result As String
    'Set objIE = CreateObject("InternetExplorer.Application") ' Don't think this is needed
    'objIE.navigate "about:blank" ' Don't think this is needed
    'objIE.Visible = False ' Don't think this is needed
    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
    URl = "http://myApi/iSendJsonTo"
    objHTTP.Open "POST", URl, False
    'objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
   objHTTP.setRequestHeader "Content-type", "application/json"
   objHTTP.send ("Json")
   result = objHTTP.responseText
   'objIE.document.Write result ' Don't think this is needed

   'Some simple debugging
   Range("A25").Value = result
   Range("A26").Value = Json


   Set objHTTP = Nothing

1 个答案:

答案 0 :(得分:4)

以下是发送JSON的代码,清理了一点。

    Dim objHTTP As Object
    Dim Json As String
    Json = Range("A15") 'here I am pulling in an existing json string to test it. String is created in other VBA code

    Dim result As String

    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
    URl = "http://myApi/iSendJsonto/"
    objHTTP.Open "POST", URl, False

   objHTTP.setRequestHeader "Content-type", "application/json"
   objHTTP.send (Json)
   result = objHTTP.responseText

   'Some simple debugging
   Range("A25").Value = result
   Range("A26").Value = Json


   Set objHTTP = Nothing