效实中学

       栏目导航 网站首页>>资源中心>>软件知识 >>编程
共有 3089 位读者读过此文   
 

ASP解析JSON格式数据方法

  发表日期:2017年8月17日            【编辑录入: 叶建勇 】      宽屏显示

VBScript 是 ASP 服务端程序的常用语言,VBScript 解析 JSON是个问题.,自己写解析程序不太容易,碰到这问题, 第一个想到的就是 JScript 了。

注意,以下文件均以UTF-8的编码保存!

方法一(这是直接在 asp 里混用脚本):

  1. <script language="jscript" runat="server">    
  2.     Array.prototype.get = function(x) { return this[x]; };    
  3.     function parseJSON(strJSON) { return eval("(" + strJSON + ")"); }    
  4. </script>    
  5. <%    
  6.     Dim json, obj    
  7.     json = "{a:""aaa"", b:{ name:""bb"", value:""text"" }, c:[""item0"", ""item1"", ""item2""]}"    
  8.     Set obj = parseJSON(json)    
  9.   
  10.     Response.Write "JSON原文为:<br>"    
  11.     Response.Write json  
  12.     Response.Write "<hr>"  
  13.   
  14.     Response.Write "a=" & obj.a & "<br />"    
  15.     Response.Write "b=" & obj.b.name & "<br />"    
  16.     Response.Write "c.length=" & obj.c.length & "<br />"    
  17.     Response.Write "c.get(0)=" & obj.c.get(0) & "<br />"    
  18.   
  19.     Set obj = Nothing    
  20. %>    

还有一个方法就是 使用 MS 的 脚本控件,也一样是使用了 JScript

方法二:

解析文件:paseJSON.asp

  1. <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>  
  2. <%Session.CodePage="65001"%>  
  3. <%Response.CodePage="65001"%>  
  4. <%Response.Charset="UTF-8" %>  
  5. <%  
  6.     Dim scriptCtrl    
  7.     Function parseJSON(str)    
  8.         If Not IsObject(scriptCtrl) Then    
  9.             Set scriptCtrl = Server.CreateObject("MSScriptControl.ScriptControl")    
  10.             scriptCtrl.Language = "JScript"    
  11.             scriptCtrl.AddCode "Array.prototype.get = function(x) { return this[x]; }; var result = null;"    
  12.         End If    
  13.         scriptCtrl.ExecuteStatement "result = " & str & ";"    
  14.         Set parseJSON = scriptCtrl.CodeObject.result    
  15.     End Function    
  16. %>  

测试文件:c.asp

  1. <!--#include file="jsonParse.asp"-->  
  2. <%Session.CodePage="65001"%>   
  3. <%Response.CodePage="65001"%>   
  4. <%Response.Charset="UTF-8" %>  
  5. <%  
  6.     Dim json    
  7.     json = "{a:""aaa"", b:{ name:""bb"", value:""text"" }, c:[""item0"", ""item1"", ""item2""]}"    
  8.   
  9.     Set obj = parseJSON(json)    
  10.   
  11.     Response.Write "JSON原文为:<br>"    
  12.     Response.Write json  
  13.     Response.Write "<hr>"  
  14.   
  15.     Response.Write "a=" & obj.a & "<br />"    
  16.     Response.Write "b=" & obj.b.name & "<br />"    
  17.     Response.Write "c.length=" & obj.c.length & "<br />"    
  18.     Response.Write "c.get(0)=" & obj.c.get(0) & "<br />"    
  19.   
  20.   
  21.     Set obj = Nothing    
  22. %>  

方法一和方法二执行结果:

上面的方法应该是最简洁的方法了。

方法三:

JSON解析文件----jsonParse.asp:

  1. <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>  
  2. <%Session.CodePage="65001"%>  
  3. <%Response.CodePage="65001"%>  
  4. <%Response.Charset="UTF-8" %>  
  5. <%  
  6. 'Option Explicit  
  7. Dim sc4Json  
  8. Sub InitScriptControl  
  9.    Set sc4Json = Server.CreateObject("MSScriptControl.ScriptControl")  
  10.    sc4Json.Language = "JavaScript"  
  11.    sc4Json.AddCode "var itemTemp=null;function getJSArray(arr, index){itemTemp=arr[index];}"  
  12. End Sub  
  13.   
  14. Function getJSONObject(strJSON)  
  15.    sc4Json.AddCode "var jsonObject = " & strJSON  
  16.    Set getJSONObject = sc4Json.CodeObject.jsonObject  
  17. End Function  
  18.   
  19. Sub getJSArrayItem(objDest,objJSArray,index)  
  20.    On Error Resume Next  
  21.    sc4Json.Run "getJSArray",objJSArray, index  
  22.    Set objDest = sc4Json.CodeObject.itemTemp  
  23.    If Err.number=0 Then Exit Sub  
  24.    objDest = sc4Json.CodeObject.itemTemp  
  25. End Sub  
  26. %>  
测试文件----Test.asp
  1. <!--#include file="jsonParse.asp"-->  
  2. <%Session.CodePage="65001"%>  
  3. <%Response.CodePage="65001"%>  
  4. <%Response.Charset="UTF-8" %>  
  5. <%  
  6. Dim strTest  
  7. strTest = "{name:""张三丰"", age:24, email:[""zsf@163.com"",""zsf@gmail.com""], family:{parents:[""父亲"",""母亲""],toString:function(){return ""家庭成员"";}}}"  
  8. Response.Write "JSON原文:<br>"  
  9. Response.Write ( strTest )  
  10.   
  11. Dim objTest  
  12. InitScriptControl  
  13. Set objTest = getJSONObject( strTest )  
  14. %>  
  15. <hr>  
  16. 姓名:<br>  
  17. <%=objTest.name%><br>  
  18. <hr>  
  19. 邮件地址(方法一):<br>  
  20. <%  
  21. For i=0 To objTest.email.length  
  22.     Response.Write ( sc4Json.Eval("jsonObject.email["&i&"]") & "<br>")  
  23. Next  
  24. %>  
  25. 邮件地址(方法二):<br>  
  26. <%  
  27. Dim email  
  28. For i=0 To objTest.email.length  
  29.     getJSArrayItem email,objTest.email,i  
  30.     Response.Write email & "<br>"  
  31. Next  
  32. %>  
  33. <hr>  
  34. 家庭信息:<br>  
  35. <%  
  36. Dim ai  
  37. For i=0 To objTest.family.parents.length  
  38.     getJSArrayItem ai, objTest.family.parents, i  
  39.     Response.Write ai & "<br>"  
  40. Next  
  41. %>  
  42. toString()函数:<br>  
  43. <%=objTest.family.toString()%>  
  44. <br>  
  45. toString属性:<br>  
  46. <%=objTest.family.toString%>  
  47. <%  
  48. Set objTest=nothing  
  49. %>  

方法三执行行结果:

文件下载:http://download.csdn.net/download/xieyunc/9842375



 
  打印本页