ASP VBScrip数据转JSON格式
aspjosn是一款实现VBScript代码JSON序列化的ASP技术。
aspjosn输入可以是对象或者数组类型。jsObject和jsArray类在服务器端将数据转换成JSON,这两个类都基于jsCore实现。
aspjson支持嵌套使用,例如,jsObject方法可以包含数字、字符串、NULL、数组和其他原始类型,jsArray方法可以包含这些jsObject方法,或者其他所有的原始类型。
对象转JSON
ASP代码
<!--#includefile="JSON_latest.asp"-->
<%
Dimmember
Setmember=jsObject()
member("name")="Tuğrul"
member("surname")="Topuz"
member("message")="HelloWorld"
member.Flush
%>
输出
{"name":"Tu\u011Frul","surname":"Topuz","message":"HelloWorld"}
SQL数据转JSON
ASP代码
<!--#includefile="JSON_latest.asp"--> <!--#includefile="JSON_UTIL_latest.asp"--> <% QueryToJSON(dbconn,"SELECTname,surnameFROMmembersWHEREage<30").Flush %>
输出
[
{
"name":"ali",
"surname":"osman"
},
{
"name":"mahmut",
"surname":"\u00E7\u0131nar"
}
]
多维数组
代码
<!--#includefile="JSON_latest.asp"--> <% Dima(1,1) a(0,0)="zero-zero" a(0,1)="zero-one" a(1,0)="one-zero" a(1,1)="one-one" Response.WritetoJSON(a) %>
输出
[["zero-zero","zero-one"],["one-zero","one-one"]]
aspjson源代码
以下是aspjson2.0.4的源代码,使用时将下面代码复制保存成一个asp文件,然后在使用的代码中include包含就可以用了。当然,也建议到googlecode直接下载源文件,地址:https://code.google.com/p/aspjson/。
<%
'
' VBSJSON2.0.3
' Copyright(c)2009Tu餽ulTopuz
' UndertheMIT(MIT-LICENSE.txt)license.
'
ConstJSON_OBJECT =0
ConstJSON_ARRAY =1
ClassjsCore
PublicCollection
PublicCount
PublicQuotedVars
PublicKind'0=object,1=array
PrivateSubClass_Initialize
SetCollection=CreateObject("Scripting.Dictionary")
QuotedVars=True
Count=0
EndSub
PrivateSubClass_Terminate
SetCollection=Nothing
EndSub
'counter
PrivatePropertyGetCounter
Counter=Count
Count=Count+1
EndProperty
'-datamaluplation
'--pair
PublicPropertyLetPair(p,v)
IfIsNull(p)Thenp=Counter
Collection(p)=v
EndProperty
PublicPropertySetPair(p,v)
IfIsNull(p)Thenp=Counter
IfTypeName(v)<>"jsCore"Then
Err.Raise&hD,"class:class","Incompatibletypes:'"&TypeName(v)&"'"
EndIf
SetCollection(p)=v
EndProperty
PublicDefaultPropertyGetPair(p)
IfIsNull(p)Thenp=Count-1
IfIsObject(Collection(p))Then
SetPair=Collection(p)
Else
Pair=Collection(p)
EndIf
EndProperty
'--pair
PublicSubClean
Collection.RemoveAll
EndSub
PublicSubRemove(vProp)
Collection.RemovevProp
EndSub
'datamaluplation
'encoding
FunctionjsEncode(str)
Dimcharmap(127),haystack()
charmap(8)="\b"
charmap(9)="\t"
charmap(10)="\n"
charmap(12)="\f"
charmap(13)="\r"
charmap(34)="\"""
charmap(47)="\/"
charmap(92)="\\"
Dimstrlen:strlen=Len(str)-1
ReDimhaystack(strlen)
Dimi,charcode
Fori=0Tostrlen
haystack(i)=Mid(str,i+1,1)
charcode=AscW(haystack(i))And65535
Ifcharcode<127Then
IfNotIsEmpty(charmap(charcode))Then
haystack(i)=charmap(charcode)
ElseIfcharcode<32Then
haystack(i)="\u"&Right("000"&Hex(charcode),4)
EndIf
Else
haystack(i)="\u"&Right("000"&Hex(charcode),4)
EndIf
Next
jsEncode=Join(haystack,"")
EndFunction
'converting
PublicFunctiontoJSON(vPair)
SelectCaseVarType(vPair)
Case0 'Empty
toJSON="null"
Case1 'Null
toJSON="null"
Case7 'Date
'toJSON="newDate("&(vPair-CDate(25569))*86400000&")" 'letinonlyutctime
toJSON=""""&CStr(vPair)&""""
Case8 'String
toJSON=""""&jsEncode(vPair)&""""
Case9 'Object
DimbFI,i
bFI=True
IfvPair.KindThentoJSON=toJSON&"["ElsetoJSON=toJSON&"{"
ForEachiInvPair.Collection
IfbFIThenbFI=FalseElsetoJSON=toJSON&","
IfvPair.KindThen
toJSON=toJSON&toJSON(vPair(i))
Else
IfQuotedVarsThen
toJSON=toJSON&""""&i&""":"&toJSON(vPair(i))
Else
toJSON=toJSON&i&":"&toJSON(vPair(i))
EndIf
EndIf
Next
IfvPair.KindThentoJSON=toJSON&"]"ElsetoJSON=toJSON&"}"
Case11
IfvPairThentoJSON="true"ElsetoJSON="false"
Case12,8192,8204
toJSON=RenderArray(vPair,1,"")
CaseElse
toJSON=Replace(vPair,",",".")
Endselect
EndFunction
FunctionRenderArray(arr,depth,parent)
Dimfirst:first=LBound(arr,depth)
Dimlast:last=UBound(arr,depth)
Dimindex,rendered
Dimlimiter:limiter=","
RenderArray="["
Forindex=firstTolast
Ifindex=lastThen
limiter=""
EndIf
OnErrorResumeNext
rendered=RenderArray(arr,depth+1,parent&index&",")
IfErr=9Then
OnErrorGoTo0
RenderArray=RenderArray&toJSON(Eval("arr("&parent&index&")"))&limiter
Else
RenderArray=RenderArray&rendered&""&limiter
EndIf
Next
RenderArray=RenderArray&"]"
EndFunction
PublicPropertyGetjsString
jsString=toJSON(Me)
EndProperty
SubFlush
IfTypeName(Response)<>"Empty"Then
Response.Write(jsString)
ElseIfWScript<>EmptyThen
WScript.Echo(jsString)
EndIf
EndSub
PublicFunctionClone
SetClone=ColClone(Me)
EndFunction
PrivateFunctionColClone(core)
Dimjsc,i
Setjsc=newjsCore
jsc.Kind=core.Kind
ForEachiIncore.Collection
IfIsObject(core(i))Then
Setjsc(i)=ColClone(core(i))
Else
jsc(i)=core(i)
EndIf
Next
SetColClone=jsc
EndFunction
EndClass
FunctionjsObject
SetjsObject=newjsCore
jsObject.Kind=JSON_OBJECT
EndFunction
FunctionjsArray
SetjsArray=newjsCore
jsArray.Kind=JSON_ARRAY
EndFunction
FunctiontoJSON(val)
toJSON=(newjsCore).toJSON(val)
EndFunction
%>
更多aspjson的功能,请参考起wifi页面: https://code.google.com/p/aspjson/w/list。