2017-04-01 151 views
0

我需要解析从VBScript中的API返回的JSON。我有将请求发送到API并获取响应的代码(可以提供此代码)。我只需要解析API返回的JSON记录并使其可用的代码。我需要知道JSON中每个字段的内容,以及每个记录何时开始和结束,以便每个记录可以存储在数据库中(不需要数据库存储代码)。使用VBScript循环浏览JSON

的JSON模式模式是像这样:

{ 
    "name": string 
    "id": int 
    "birth": date 
} 

如果你有自己的JSON解析库,它可以是有用的。我正在使用this(可以提供)。

我到目前为止的代码是这样的:

Set objHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP") 
objHTTP.open "GET", "http://localhost/website/api.asp", False 
'Some headers: 
objHTTP.setRequestHeader "CustomerAccountId", "{my_account_id}" 
objHTTP.setRequestHeader "CustomerId", "{my_customer_id}" 
objHTTP.setRequestHeader "DeveloperToken", "{my_API_access_Key}" 
objHTTP.setRequestHeader "Password", "{my_password}" 
objHTTP.setRequestHeader "UserName", "{my_user_name}" 
objHTTP.send "" 

'Error treatment: 
If objHTTP.Status >= 400 And objHTTP.Status <= 599 Then 
    Response.write "Error Occurred : " & objHTTP.status & " - " & objHTTP.statusText 
    Response.end 
Else 
    Response.write "Success : " & objHTTP.status & " - " & objHTTP.ResponseText 
    Response.end 
End If 

str = objHTTP.responseText 
Set o = json.Decode(str) 
'I need the rest of the code here! 
+0

[parser](http://demon.tw/my-work/vbs-json.html)返回对象或数组。对于这种情况,我想这是数组(我没有看到整个JSON)。你有没有尝试过'For Each ... Next'来遍历数组元素? – omegastripes

+0

除了“可以为我写代码吗?”之外,我没有在这里看到一个问题,这将是无关紧要的。对于非工作代码的帮助:显示非工作代码并解释什么不工作。包含所有您收到的错误消息。另外,在普通的VBScript中没有'response.write'。这是ASP吗? –

回答

0

看来你使用的是经典的ASP。这意味着您可以轻松运行JScr​​ipt而不是VBScript。

意味着你可以使用a proper JSON parser和简单的语法来访问结果对象。

<script runat="server" language="JScript" src="json2.js"> 
<script runat="server" language="JScript"> 

function httpGet(url) { 
    var objHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP"); 
    objHTTP.open("GET", url, false); 

    objHTTP.setRequestHeader("CustomerAccountId", "{my_account_id}"); 
    objHTTP.setRequestHeader("CustomerId", "{my_customer_id}"); 
    objHTTP.setRequestHeader("DeveloperToken", "{my_API_access_Key}"); 
    objHTTP.setRequestHeader("Password", "{my_password}"); 
    objHTTP.setRequestHeader("UserName", "{my_user_name}"); 
    objHTTP.send(); 

    // Error treatment 
    if (objHTTP.Status >= 400 && objHTTP.Status <= 599) { 
    Response.write("Error Occurred : " + objHTTP.status + " - " + objHTTP.statusText); 
    Response.end(); 
    } 
    return objHTTP; 
} 

var xhr = httpGet("http://localhost/website/api.asp"); 
var data = JSON.parse(xhr.responseText); 

// read about how to access objects and arrays in JS 
</script> 

甚至可以在同一页面上混合使用VBScript和Javascript。

<script runat="server" language="VBScript"> 
Function HttpGet(url) 
    Set objHTTP = Server.CreateObject("MSXML2.ServerXMLHTTP") 

    With objHTTP 
     .open "GET", url, False 

     'Some headers: 
     .setRequestHeader "CustomerAccountId", "{my_account_id}" 
     .setRequestHeader "CustomerId", "{my_customer_id}" 
     .setRequestHeader "DeveloperToken", "{my_API_access_Key}" 
     .setRequestHeader "Password", "{my_password}" 
     .setRequestHeader "UserName", "{my_user_name}" 
     .send "" 

     'Error treatment: 
     If .Status >= 400 And .Status <= 599 Then 
      Response.write "Error Occurred : " & .status & " - " & .statusText 
      Response.end 
     End If 
    End With 

    Set HttpGet = objHTTP 
End Function 
</script> 

<script runat="server" language="JScript" src="json2.js"> 
<script runat="server" language="JScript"> 
var xhr = HttpGet("http://localhost/website/api.asp"); 
var data = JSON.parse(xhr.responseText); 

// read about how to access objects and arrays in JS 
</script> 

我没有展示如何使用JS中的对象。首先,我不知道你的对象结构。另一方面,这是基本的东西,你可以阅读关于绝对到处。