首页 服务器 编程 必备知识 搜索引擎 圩日手册
站内搜索
最近浏览
推荐文章
热文排行

ASP( VBScript ) 解析 JSON


VBScript 是 ASP 服务端程序的常用语言.
VBScript 解析 JSON是个问题. 自己写解析程序,当然不容易.

碰到这问题, 第一个想到的就是 JScript 了.

 

      
    

这是直接在 asp 里混用脚本.
还有一个方法就是 使用 MS 的 脚本控件. 
也一样是使用了 JScript

 

 

    Dim scriptCtrl  
    Function parseJSON(str)  
        If Not IsObject(scriptCtrl) Then  
            Set scriptCtrl = Server.CreateObject("MSScriptControl.ScriptControl")  
            scriptCtrl.Language = "JScript"  
            scriptCtrl.AddCode "Array.prototype.get = function(x) { return this[x]; }; var result = null;"  
        End If  
        scriptCtrl.ExecuteStatement "result = " & str & ";"  
        Set parseJSON = scriptCtrl.CodeObject.result  
    End Function  
      
    Dim json  
    json = "{a:""aaa"", b:{ name:""bb"", value:""text"" }, c:[""item0"", ""item1"", ""item2""]}"  
      
    Set obj = parseJSON(json)  
      
    Response.Write obj.a & "
"  
    Response.Write obj.b.name & "
"  
    Response.Write obj.c.length & "
"  
    Response.Write obj.c.get(0) & "
"  
      
    Set obj = Nothing  
      
    Set scriptCtrl = Nothing

 

之前写这个时,还忽略了一个问题.

上面二个方法都使用了 jscript 把 json 串解析成 js 对象.

不同之处是, 第一个方法, eval 是在当前宿主环境中执行.
第二个方法是, 在另外的宿主环境中执行.

这涉及到了一个安全性问题. json 如果是从客户端提交上来的话, 难以保证没有恶意用户提交非法代码...
这样,第一个方法,就会在当前环境中 eval(...恶意代码...) 后果不堪设想!!!

第二个方法,创建了 ScriptControl 控件, 在里面执行代码则相对安全了, 因为是在一个隔离起来的环境中执行.
但还有两个东东要给先卡掉, 因为代码在 ScriptControl 中执行,也可以在里面使用 ActiveXObject 或 GetObject 与外界打交道..
仍然不安全.

这时候,就有必要再调整一下代码:

Dim scriptCtrl
Function parseJSON(str)
 If Not IsObject(scriptCtrl) Then
  Set scriptCtrl = Server.CreateObject("MSScriptControl.ScriptControl")
  scriptCtrl.Language = "JScript"
  scriptCtrl.AddCode "function ActiveXObject() {}" ' 覆盖 ActiveXObject
  scriptCtrl.AddCode "function GetObject() {}" ' 覆盖 ActiveXObject
  scriptCtrl.AddCode "Array.prototype.get = function(x) { return this[x]; }; var result = null;"
 End If
  On Error Resume Next
 scriptCtrl.ExecuteStatement "result = " & str & ";"
 Set parseJSON = scriptCtrl.CodeObject.result
  If Err Then
 Err.Clear
 Set parseJSON = Nothing
  End If
End Function
Dim json
json = "{a:""aaa"", b:{ name:""bb"", value:""text"" }, c:[""item0"", ""item1"", ""item2""]}"
Set obj = parseJSON(json)
Response.Write obj.a & "<br />"
Response.Write obj.b.name & "<br />"
Response.Write obj.c.length & "<br />"
Response.Write obj.c.get(0) & "<br />"
Set obj = Nothing

If IsObject(scriptCtrl) Then Set scriptCtrl = Nothing

[ly70041]
添加时间:2016-03-17
版权所有(C)2005-2015