VBA POST json 到 API

dev*_*ing 2 excel vba json http-post

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

我知道有一些在线工具可以将 json 转换为 vba 并返回,还有将浏览器插件转换为发布请求的工具,但我是办公室中唯一可以执行此操作的工具,因此如果我生病或休假,我想将其自动化。为此,我需要发送 json 并可能存储响应,以便我可以解析它。

我是编码新手,所以发布这样的请求超出了我的头脑。到目前为止,我有以下代码来编写json。我将不胜感激任何帮助我开始。如果需要,我可以发布我想发布的 json 或 api 示例。

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

编辑已经取得了一些进展。现在可以向 URL 发送 JSON 字符串并获得响应。但是它总是返回失败:

"{ ""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
Run Code Online (Sandbox Code Playgroud)

dev*_*ing 6

这是发送 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
Run Code Online (Sandbox Code Playgroud)