在很久以前,我还在使用asp的时候,发现asp居然是没有处理json的库,但是因为json使用的频率是越来越高,每次后台处理这些json总是越来越麻烦,后来想了一下索性自己写了一个asp类,因为这个JSON类是我以前使用asp的时候自己设计的,但是因为我已经很久很久没使用Asp了,所以一直是没太更新。但一般的使用还是没问题的
<%
'
' 辛苦制作,请保留版权
' QQ:24722
'
Class jsCode
Public jsondb
Public Property Let show(db)
If Mid(db,1,1) = "{" Then
Set jsondb = tobj(db)
Else
jsondb = tobj(db)
End If
End Property
Public Default Property Get show
If Mid(db,1,1) = "{" Then
Set show = jsondb
Else
show = jsondb
End If
End Property
Private Function kh(db)
dim a,s,i,a1,a2,c
a = db
s = Array("","",0,0) '3 为开关,4为判断{
For i = 2 To Len(a)
If s(2) = 0 Then
If Mid(a,i,1) = ":" Then
s(2) = 1
s(0) = s(0) & "{{arr}}"
Else
s(0) = s(0) & Mid(a,i,1)
End If
Else
If Mid(a,i,1) = "{" Then
s(3) = s(3) + 1
ElseIf Mid(a,i,1) = "}" Then
s(3) = s(3) - 1
End If
If Mid(a,i,1) = "[" Then
s(3) = s(3) + 1
ElseIf Mid(a,i,1) = "]" Then
s(3) = s(3) - 1
End If
If Mid(a,i,1) = "," And s(3) <= 0 Then 'json结束标识为,
s(2) = 0
s(1) = s(1) & "{{arr}}"
Else
s(1) = s(1) & Mid(a,i,1)
End If
End If
Next
s(1) = Mid(s(1),1,Len(s(1)) - 1)
a1 = Split(Replace(s(0),"""",""),"{{arr}}")
a2 = Split(Replace(s(1),"""",""),"{{arr}}")
Set c = CreateObject("Scripting.Dictionary")
For i = 0 To UBound(a1) - 1
c.Add a1(i), a2(i)
Next
Set kh = c
End Function
Private Function getarr(db)
Dim s,g,a,json,arr(),b,c
s = Array(0,0,0)
b = Array("[","]",0)
c = Array("""",0)
a = ""
For i = 2 To Len(db) - 1
g = Mid(db,i,1)
If (IsNumeric(g) Or g = "[" Or g = "{") And s(0) = 0 Then
a = a & g
s(0) = 1
If g = "[" Then
b(0) = "["
b(1) = "]"
b(2) = 1
s(1) = 1
ElseIf g = "{" Then
b(0) = "{"
b(1) = "}"
b(2) = 1
s(1) = 1
Else
s(1) = 0
End If
ElseIf g = """" And s(0) = 0 Then
s(1) = 2
s(0) = 1
c(0) = """"
c(1) = 1
ElseIf g = "'" And s(0) = 0 Then
s(1) = 2
s(0) = 1
c(0) = "'"
c(1) = 1
ElseIf s(0) = 1 Then
If s(1) = 0 Then '数字型
If g = "," Then
ReDim Preserve arr(s(2))
arr(s(2)) = a
s(2) = s(2) + 1
a = ""
s(0) = 0
Else
a = a & g
End If
If i = Len(db) - 1 Then
ReDim Preserve arr(s(2))
arr(s(2)) = a
s(2) = s(2) + 1
End If
ElseIf s(1) = 1 Then '对象型
If g = b(0) Then
b(2) = b(2) + 1
ElseIf g = b(1) Then
b(2) = b(2) - 1
End If
If g = "," And b(2) = 0 Then
ReDim Preserve arr(s(2))
arr(s(2)) = a
s(2) = s(2) + 1
a = ""
s(0) = 0
Else
a = a & g
End If
If i = Len(db) - 1 Then
ReDim Preserve arr(s(2))
arr(s(2)) = a
s(2) = s(2) + 1
End If
ElseIf s(1) = 2 Then '字符型
If g = c(0) Then
c(1) = c(1) - 1
ElseIf c(1) = 1 Then
a = a & g
End If
If g = "," And c(1) = 0 Then
ReDim Preserve arr(s(2))
arr(s(2)) = a
s(2) = s(2) + 1
a = ""
s(0) = 0
End If
If i = Len(db) - 1 Then
ReDim Preserve arr(s(2))
arr(s(2)) = a
s(2) = s(2) + 1
End If
End If
End If
Next
getarr = arr
End Function
Private Function getobj(db)
Dim arr(),g,c,s,k,b,i
kg = 0
s = Array(1,0,0, - 1)
k = db
g = Mid(k,2,1)
c = Mid(k,1,1)
b = 0
If c = "{" Then
b = 1
End If
If (g = "[" Or g = """" Or IsNumeric(g)) And b = 0 Then
getobj = getarr(db)
Exit Function
End If
For i = 1 To Len(db)
If kg = 0 Then
If Mid(k,i,1) = "{" Then
kg = 1
s(0) = i
s(2) = 1
End If
Else
s(2) = s(2) + 1
If Mid(k,i,1) = "{" Then
s(1) = s(1) + 1
ElseIf Mid(k,i,1) = "}" Then
If s(1) = 0 Then
s(3) = s(3) + 1
ReDim Preserve arr(s(3))
arr(s(3)) = Mid(k,s(0),s(2))
kg = 0
Else
s(1) = s(1) - 1
End If
End If
End If
Next
getobj = arr
End Function
Public Function tobj(db)
Dim arr,json(),g,i
g = Mid(db,2,1)
arr = getobj(db)
If g = "{" Then
For i = 0 To UBound(arr)
ReDim Preserve json(i)
Set json(i) = kh(arr(i))
Next
tobj = json
ElseIf Mid(db,1,1) = "{" Then
Set tobj = kh(db)
Else
For i = 0 To UBound(arr)
ReDim Preserve json(i)
json(i) = arr(i)
Next
tobj = json
End If
End Function
Public Function jsonstr(db)
Dim a,s
s = "["
For Each b In db
a = ""
For Each c In b
If c = "title" Then
a = a & """" & c & """:""" & tounicode(b(c)) & ""","
Else
a = a & """" & c & """:""" & b(c) & ""","
End If
Next
s = s & "{" & Mid(a,1,Len(a) - 1) & "},"
Next
jsonstr=Mid(s,1,Len(s) - 1) & "]"
End Function
End Class
function json(db)
dim j
set j=new jscode
j.show=db
if mid(db,1,1)="{" then
set json=j()
else
json=j()
End if
set j=nothing
'用法说明
'示例1:{user:1} 这种格式返回的是对象。调用需 set g=json(db) response.Write g("user")
'示例2:[1,"2",'3',{},[]] 这种格式返回的是数组。调用g=json(db) response.Write g(0)得到值1
'示例3:[{user:1},{user:2},{user:3}] 这种格式返回的是数组。调用g=json(db) response.Write g(0)("user")得到值为1
End function
%>