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。