Json_2.0.3.asp类文件: <% ' VBS JSON 2.0.3 ' Copyright (c) 2009 Tu餽ul Topuz ' Under the MIT (MIT-LICENSE.txt) license. Const JSON_OBJECT = 0 Const JSON_ARRAY = 1 Class jsCore Public Collection Public Count Public QuotedVars Public Kind ' 0 = object, 1 = array Private Sub Class_Initialize Set Collection = CreateObject("Scripting.Dictionary") QuotedVars = True Count = 0 End Sub Private Sub Class_Terminate Set Collection = Nothing End Sub ' counter Private Property Get Counter Counter = Count Count = Count + 1 End Property ' - data maluplation ' -- pair Public Property Let Pair(p, v) If IsNull(p) Then p = Counter Collection(p) = v End Property Public Property Set Pair(p, v) If IsNull(p) Then p = Counter If TypeName(v) <> "jsCore" Then Err.Raise &hD, "class: class", "Incompatible types: '" & TypeName(v) & "'" End If Set Collection(p) = v End Property Public Default Property Get Pair(p) If IsNull(p) Then p = Count - 1 If IsObject(Collection(p)) Then Set Pair = Collection(p) Else Pair = Collection(p) End If End Property ' -- pair Public Sub Clean Collection.RemoveAll End Sub Public Sub Remove(vProp) Collection.Remove vProp End Sub ' data maluplation ' encoding Function jsEncode(str) Dim charmap(127), haystack() charmap(8) = "\b" charmap(9) = "\t" charmap(10) = "\n" charmap(12) = "\f" charmap(13) = "\r" charmap(34) = "\""" charmap(47) = "\/" charmap(92) = "\\" Dim strlen : strlen = Len(str) - 1 ReDim haystack(strlen) Dim i, charcode For i = 0 To strlen haystack(i) = Mid(str, i + 1, 1) charcode = AscW(haystack(i)) And 65535 If charcode < 127 Then If Not IsEmpty(charmap(charcode)) Then haystack(i) = charmap(charcode) ElseIf charcode < 32 Then haystack(i) = "\u" & Right("000" & Hex(charcode), 4) End If Else haystack(i) = "\u" & Right("000" & Hex(charcode), 4) End If Next jsEncode = Join(haystack, "") End Function ' converting Public Function toJSON(vPair) Select Case VarType(vPair) Case 0 ' Empty toJSON = "null" Case 1 ' Null toJSON = "null" Case 7 ' Date ' toJSON = "new Date(" & (vPair - CDate(25569)) * 86400000 & ")" ' let in only utc time toJSON = """" & CStr(vPair) & """" Case 8 ' String toJSON = """" & jsEncode(vPair) & """" Case 9 ' Object Dim bFI,i bFI = True If vPair.Kind Then toJSON = toJSON & "[" Else toJSON = toJSON & "{" For Each i In vPair.Collection If bFI Then bFI = False Else toJSON = toJSON & "," If vPair.Kind Then toJSON = toJSON & toJSON(vPair(i)) Else If QuotedVars Then toJSON = toJSON & """" & i & """:" & toJSON(vPair(i)) Else toJSON = toJSON & i & ":" & toJSON(vPair(i)) End If End If Next If vPair.Kind Then toJSON = toJSON & "]" Else toJSON = toJSON & "}" Case 11 If vPair Then toJSON = "true" Else toJSON = "false" Case 12, 8192, 8204 toJSON = RenderArray(vPair, 1, "") Case Else toJSON = Replace(vPair, ",", ".") End select End Function Function RenderArray(arr, depth, parent) Dim first : first = LBound(arr, depth) Dim last : last = UBound(arr, depth) Dim index, rendered Dim limiter : limiter = "," RenderArray = "[" For index = first To last If index = last Then limiter = "" End If On Error Resume Next rendered = RenderArray(arr, depth + 1, parent & index & "," ) If Err = 9 Then On Error GoTo 0 RenderArray = RenderArray & toJSON(Eval("arr(" & parent & index & ")")) & limiter Else RenderArray = RenderArray & rendered & "" & limiter End If Next RenderArray = RenderArray & "]" End Function Public Property Get jsString jsString = toJSON(Me) End Property Sub Flush If TypeName(Response) <> "Empty" Then Response.Write(jsString) ElseIf WScript <> Empty Then WScript.Echo(jsString) End If End Sub Public Function Clone Set Clone = ColClone(Me) End Function Private Function ColClone(core) Dim jsc, i Set jsc = new jsCore jsc.Kind = core.Kind For Each i In core.Collection If IsObject(core(i)) Then Set jsc(i) = ColClone(core(i)) Else jsc(i) = core(i) End If Next Set ColClone = jsc End Function End Class Function jsObject Set jsObject = new jsCore jsObject.Kind = JSON_OBJECT End Function Function jsArray Set jsArray = new jsCore jsArray.Kind = JSON_ARRAY End Function Function toJSON(val) toJSON = (new jsCore).toJSON(val) End Function %>
调用示例:
示例1: <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <%Response.ContentType = "text/JSON"%> <!--#include file="Json_2.0.3.asp"--> <% Dim ar Set ar = jsArray() Dim Jsons Set Jsons = jsObject() Jsons("Name") = "1" Jsons("Age") = 10 ar(0)=Jsons.jsString Jsons("Name") = "2" Jsons("Age") = 20 ar(1)=Jsons.jsString Jsons("Name") = "3" Jsons("Age") = 30 ar(2)=Jsons.jsString Jsons("Name") = "4" Jsons("Age") = 40 ar(3)=Jsons.jsString Jsons("Name") = "5" Jsons("Age") = 50 ar(4)=Jsons.jsString Jsons("Name") = "6" Jsons("Age") = 60 ar(5)=Jsons.jsString Jsons("Name") = "7" Jsons("Age") = 70 ar(6)=Jsons.jsString Jsons("Name") = "8" Jsons("Age") = 80 ar(7)=Jsons.jsString Jsons("Name") = "9" Jsons("Age") = 90 ar(8)=Jsons.jsString Jsons("Name") = "10" Jsons("Age") = 100 ar(9)=Jsons.jsString 'Response.write ar(0) 'Response.write ar(1) 'Response.write ar(2) Response.write ar.jsString Response.Write "<BR>" DIM myArray myArray = Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct", "Nov","Dec") 'Response.write myArray(0) Dim sc Set sc = CreateObject("MSScriptControl.ScriptControl") Dim str 'str = "{'uid':'1','username':'abc','email':'123@163.com'}" str="['aaa','bbb','ccc']" sc.Language = "JScript" sc.AddCode "var o = " & str & ";" Response.Write sc.Eval("o[1]") Set Jsons = Nothing %> 示例2: <%@ codepage="65001" %> <% '************************************ '*Author:Clove '*Desc:TestAspJSON '*CodePage:UTF8 '*Date:2012-04-09 '*WebSite:30c.org '************************************ %> <!--#include file="JSON_2.0.4.asp"--> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 数字--><%=toJSON(30)%><hr> 时间--><%=toJSON(now())%><hr> 数组--><%=toJSON(array(30,"Clove",Now()))%><hr> 匿名一维数组--><% Set a = jsArray() a(Null) = 2 a(Null) = 4 a(Null) = 6 a(Null) = 8 a.Flush %><hr> 匿名一维数组转换为json对象--><% a.Kind = JSON_OBJECT a.Flush %><hr> json对象--><% Set o = jsObject() o("name") = "30c" o("name") = o("name") & ".org" o("surname") = "clove" o("lucky_numbers") = Array(1,2,6,7,9) o("sample_date") = #2012-4-8# o(Null) = "China" o.Flush%><hr> json对象转换为数组--><% o.Kind = JSON_ARRAY o.Flush %><hr> 多层对象--><% Set o = jsObject() Set o("person") = jsObject() o("person")("name") = "30c" o("person")("surname") = "Clove" Set o("equipment") = jsObject() o("equipment")("name") = "网站" o("equipment")("type") = "教育" o("equipment")("buy_date") = #2011-7-16# o.Flush%><hr> 多维数组--><% Set a = jsArray() Set a(Null) = jsArray() a(Null)(Null) = 0 a(Null)(Null) = 2 a(Null)(Null) = 4 a(Null)(Null) = 6 Set a(Null) = jsArray() a(Null)(Null) = 1 a(Null)(Null) = 3 a(Null)(Null) = 5 a(Null)(Null) = 7 a.Flush%><hr> 混合使用--> <% Set a = jsArray() Sub AddMember(name, surname) Set a(Null) = jsObject() a(Null)("name") = name a(Null)("type") = surname End Sub AddMember "Clove", "Human" AddMember "30c.org", "website" a.Flush %>