经典ASP发送JSON到WEB API

问题描述 投票:1回答:1

我一直在尝试从SQL数据库中提取数据行,将返回的行格式化为JSON格式并将其发送/发送到JSON Web API的方法。我使用VBScript(.Flush)的ASP JSON序列化程序将SQL数据转换为JSON。它的工作原理非常好,我具有所需的结构,也有发送JSON格式数据的方法。那么您可能会问什么问题.....

问题是我无法将apiDefaults.flush发送到Web服务器,它不起作用。如果我发送与硬编码变量相同的数据,则它可以正常工作,并且API会接收数据。

让我解释更多。

这里是我使用apiDefaults.flush在屏幕上看到的JSON输出,它的格式完全符合我的需要。

{"authentication": { "apiKey": "123456789101112131415" }, "createProperties": [ { "name": "Property 1", "propKey": "6sf3zqq151n2wkah" }, { "name": "Property 2", "propKey": "yuf38zc4cls9hz19" } ] } 

但是,我无法将此值存储到变量中。如果我可以简单地执行以下操作,那么我的问题将得到解决,但是您无法将.flush方法绑定到变量?!?!我不明白为什么会这样,因为理论上它只是一串文本。

dim myJson = apiDefaults.flush

这里的这段代码是我设置要发送到Web服务器的值的地方,我的变量包含JSON字符串

'IF I USE THIS IT WORKS PERFECTLY, IT TAKES MY MANUALLY CREATED VARIABLE/STRING AND SENDS IT
oXMLHttp.send strmultiprop 

'THIS IS WHAT I FIGURED I SHOULD BE ABLE TO USE BUT IT IS NOT TREATED LIKE A VARIABLE

oXMLHttp.send apiDefaults.flush

' I TRIED THIS AND THIS WON'T WORK EITHER

oXMLHttp.send myJson

下面是我的实际脚本

<% @LANGUAGE="VBSCRIPT" CODEPAGE="65001" %>
<!--#include file="JSON_2.0.4.asp"-->
<%

Function QueryToJSON(dbcomm, params)
        Dim rs, jsa, aaa, bbb
        Set rs = dbcomm.Execute(,params,1)
        Set jsa = jsArray()
        Do While Not (rs.EOF Or rs.BOF)
                Set jsa(Null) = jsObject()
                For Each col In rs.Fields
                        jsa(Null)(col.Name) = col.Value             
                Next
        rs.MoveNext
        Loop
        Set QueryToJSON = jsa

        rs.Close
End Function

  strConn = "PROVIDER=SQLOLEDB;DATA SOURCE=LOCALHOST;UID=sa;PWD=********;DATABASE=DB_Site"
  Set conn = Server.CreateObject("ADODB.Connection")
  conn.Open strConn
  query = "SELECT  wce_uid as name, uniqueid as propKey FROM wces_users WHERE Prop_Moved  = ?"
  CustomerID = "Y" 'Request.QueryString("CustomerID")
  arParams = array(CustomerID)
  Set cmd = Server.CreateObject("ADODB.Command")
  cmd.CommandText = query
  Set cmd.ActiveConnection = conn


' https://stackoverflow.com/questions/40781130/setting-up-rest-api-in-classic-asp
key = "1234567891011121314151678910"
url = "https://www.beds24.com/api/json/createProperties"


'1 PROPERTY WORKING
str1prop = "{""authentication"": { ""apiKey"": ""123456789101112131415"" }, ""createProperties"": [ { ""name"": ""New Test"", ""propKey"": ""NewTest1"" } ] }"

'2 PROPERTY WORKING
strmultiprop = "{""authentication"": { ""apiKey"": ""123456789101112131415"" }, ""createProperties"": [ { ""name"": ""3333"", ""propKey"": ""3333"" },  { ""name"": ""4444"", ""propKey"": ""4444"" } ] }"

set apiDefaults = QueryToJSON(cmd, arParams)

'3 THE FLUSH METHOD --- THIS DOES NOT SET THE VRIABLE TO THE OUTPUT I SEE ON SCREEN
dim myJson = apiDefaults.flush

apiDefaults.flush



conn.Close : Set Conn = Nothing

Dim oXMLHttp
Set oXMLHttp=Server.Createobject("MSXML2.ServerXMLHTTP.6.0")
oXMLHttp.open "POST", url,false
oXMLHttp.setRequestHeader "Content-Type", "application/json"
oXMLHttp.send apiDefaults.flush 'THIS IS THE ISSUE LINE USING THIS. if I CHANGE TO strmultiprop NO ISSUES AT ALL. 
response.write oXMLHttp.responseText
Set oXMLHttp = Nothing

%>

关于此的任何建议都很好。

感谢您的光临。

json serialization vbscript asp-classic serverxmlhttp
1个回答
0
投票

我的问题由@SearchAndResQ回答

“尝试oXMLHttp.send apiDefaults.jsString,您需要该属性中的值”

© www.soinside.com 2019 - 2024. All rights reserved.