当前位置:首页 -少年百科 - 大杂烩 - PC与手机 - 正文*

ASP 和VBS脚本解析JSON

2022-12-27 15:50:19

有时候只能用VBS和ASP,但又需要用到JSON和JSONP等API接口获取数据。

一般来说,都是通过正式表达式匹配来取得参数的值。但如果JSON的数据比较复杂,比如数组形式、多个层级,正则表达式就不够用了。解决的办法就是JSON本身,既然JSON是JS的数据格式,那么还是用JS来的处理。

方法一、使用HTMLFILE对象

Function jsonParser2(JsonString)
  Set html = CreateObject("htmlfile")
  Set window = html.parentWindow
  window.execScript "var json = " & JsonString, "JScript" ' 解析 json
   Set jsonParser2 = window.json 
End Function

假设JSON字符串是 {"status":0,"msg":"ok"},选获取json对象,然后取stutas的值:

set json=jsonParser2("{'status':0,'msg':'ok'}")

msgbox json.stutas


方法二、使用MSScriptControl.ScriptControl对象

Function jsonParser(JsonString,jsonKey)
Set sc = CreateObject("MSScriptControl.ScriptControl")
sc.Language = "JScript"
sc.AddCode "var tmp = " & JsonString & ";"
jsonParser = sc.Eval("tmp." & jsonKey)
End Function

但实际中创建MSScriptControl.ScriptControl并不成功。

方法三、在ASP中使用以下代码指定脚本语言为javascript


<script language="javascript" runat="server">
function JsonPaser(JsonString)
{
var JsonObj = eval("("+JsonString+")");
return JsonObj;
}

function JsArrayValue(Json,Index,Name)
{
return Name?Json[Index][Name]:Json[Index];

}
</script>


然后在ASP中 

set json=jsonPaser("{'status':0,'data':[{'name':'张三','sex':'男'},{'name':'李四','sex':'女'}]}")

取得 status 的值为:json.status

取得第一个人的姓名不能用json.data(0).name ,因为JS的数组在ASP中无法识别。这个时候也需要从JS里取出数组,JsArrayValue(json,0) 返回数组的第1项,姓名为JsArrayValue(json,0) .name

代码如下:

set data0=JsArrayValue(json,0)

response.write data0.name & ":" & data0.sex

注意:如果json中属性名是中文等,不能用上面方式读取属性值,JsArrayValue函数可以在第三个参数指定属性名。

代码如下:

set json=jsonPaser("{'status':999,'data':[{'姓名':'张三','性别':'男'},{'姓名':'李四','性别':'女'}]}")

response.write JsArrayValue(json,0,"姓名") & ":" & JsArrayValue(json,0,"性别")