Asp中JSON的使用

ASP   2024-12-14 17:39   57   0  
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
%>



博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。