将JSON对象作为POST请求发送

将JSON对象作为POST请求发送,json,vba,excel,Json,Vba,Excel,我正在尝试从Excel中的VBA应用程序发送JSON对象。下面的代码正确地发送了请求,但是我不知道如何使用正文中的JSON对象发出请求 Sub Post() Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1") URL = "http://localhost:3000/test" objHTTP.Open "POST", URL, False objHTTP.setRequestHeader "Cont

我正在尝试从Excel中的VBA应用程序发送JSON对象。下面的代码正确地发送了请求,但是我不知道如何使用正文中的JSON对象发出请求

Sub Post()

    Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
    URL = "http://localhost:3000/test"
    objHTTP.Open "POST", URL, False
    objHTTP.setRequestHeader "Content-type", "application/x-www-form-      urlencoded"
    objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
    objHTTP.send ("test=6")

End Sub

例如,如果我尝试发送“{test:6,test2:7}”并在服务器上记录请求主体,我会得到{{parts:6,test:7}”:“}

,您可能已经知道,JSON结构确实会产生严重的问题。在您的例子中,我想说的是所有关于引号的内容,如您尝试验证
{test:6,test2:7}
时所见

请尝试以下代码。在我看来,这似乎是合理的:

Sub Post()

Dim URL As String, JSONString As String, objHTTP as Object

    Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
    URL = "http://localhost:3000/test"
    objHTTP.Open "POST", URL, False
    objHTTP.setRequestHeader "Content-type", "application/x-www-form-      urlencoded"
    objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"

    JSONString = "{""test"": 6,""test2"":7}"

    objHTTP.Send JSONString

End Sub

如果其他任何人都在为帖子而挣扎,而你的正文根本没有被发送,特别是在objHTTP.Send行中使用变量而不是文本时,这对我来说很有效,在挣扎了几个小时之后,尽管我将变量声明为字符串:

    objHTTP.Send CStr(YourVariable)
这对我不起作用,正如我在别处看到的:

    objHTTP.Send CStr(YourVariable, vbFromUnicode)

谢谢这最终解决了问题。在此之前,我必须将内容类型头更改为application/json,并添加一个内容长度字段以消除400错误。