目录

需要使用json数据的场景很多,那么asp中如何操作json数据呢?asp与json格式又如何交互呢?本文介绍使用AspJson转换为json格式数据输出,以及解析json数据。

aspJSON1.17.asp文件

 0 Thenaj_in_string = Falseaj_in_escape = Falseaj_colonfound = FalseFor aj_i_tmp = 1 To Len(aj_line)If aj_in_escape Thenaj_in_escape = FalseElseSelect Case Mid(aj_line, aj_i_tmp, 1)Case """"aj_in_string = Not aj_in_stringCase ":"If Not aj_in_escape And Not aj_in_string Thenaj_currentkey = Left(aj_line, aj_i_tmp - 1)aj_currentvalue = Mid(aj_line, aj_i_tmp + 1)aj_colonfound = TrueExit ForEnd IfCase "\"aj_in_escape = TrueEnd SelectEnd IfNextif aj_colonfound thenaj_currentkey = aj_Strip(aj_JSONDecode(aj_currentkey), """")If Not level(aj_currentlevel).exists(aj_currentkey) Then level(aj_currentlevel).Add aj_currentkey, ""end ifEnd IfIf right(aj_line,1) = "{" Or right(aj_line,1) = "[" ThenIf Len(aj_currentkey) = 0 Then aj_currentkey = level(aj_currentlevel).CountSet level(aj_currentlevel).Item(aj_currentkey) = Collection()Set level(aj_currentlevel + 1) = level(aj_currentlevel).Item(aj_currentkey)aj_currentlevel = aj_currentlevel + 1aj_currentkey = ""ElseIf right(aj_line,1) = "}" Or right(aj_line,1) = "]" or right(aj_line,2) = "}," Or right(aj_line,2) = "]," Thenaj_currentlevel = aj_currentlevel - 1ElseIf Len(Trim(aj_line)) > 0 Thenif Len(aj_currentvalue) = 0 Then aj_currentvalue = aj_lineaj_currentvalue = getJSONValue(aj_currentvalue) If Len(aj_currentkey) = 0 Then aj_currentkey = level(aj_currentlevel).Countlevel(aj_currentlevel).Item(aj_currentkey) = aj_currentvalueEnd IfNextEnd Sub Public Function Collection()set Collection = Server.CreateObject("Scripting.Dictionary")End Function Public Function AddToCollection(dictobj)if TypeName(dictobj)  "Dictionary" then Err.Raise 1, "AddToCollection Error", "Not a collection."aj_newlabel = dictobj.Countdictobj.Add aj_newlabel, Collection()set AddToCollection = dictobj.item(aj_newlabel)end function Private Function CleanUpJSONstring(aj_originalstring)aj_originalstring = Replace(aj_originalstring, Chr(13) & Chr(10), "")aj_originalstring = Mid(aj_originalstring, 2, Len(aj_originalstring) - 2)aj_in_string = False : aj_in_escape = False : aj_s_tmp = ""For aj_i_tmp = 1 To Len(aj_originalstring)aj_char_tmp = Mid(aj_originalstring, aj_i_tmp, 1)If aj_in_escape Thenaj_in_escape = Falseaj_s_tmp = aj_s_tmp & aj_char_tmpElseSelect Case aj_char_tmpCase "\" : aj_s_tmp = aj_s_tmp & aj_char_tmp : aj_in_escape = TrueCase """" : aj_s_tmp = aj_s_tmp & aj_char_tmp : aj_in_string = Not aj_in_stringCase "{", "["aj_s_tmp = aj_s_tmp & aj_char_tmp & aj_InlineIf(aj_in_string, "", Chr(13) & Chr(10))Case "}", "]"aj_s_tmp = aj_s_tmp & aj_InlineIf(aj_in_string, "", Chr(13) & Chr(10)) & aj_char_tmpCase "," : aj_s_tmp = aj_s_tmp & aj_char_tmp & aj_InlineIf(aj_in_string, "", Chr(13) & Chr(10))Case Else : aj_s_tmp = aj_s_tmp & aj_char_tmpEnd SelectEnd IfNext CleanUpJSONstring = ""aj_s_tmp = split(aj_s_tmp, Chr(13) & Chr(10))For Each aj_line_tmp In aj_s_tmpaj_line_tmp = replace(replace(aj_line_tmp, chr(10), ""), chr(13), "")CleanUpJSONstring = CleanUpJSONstring & aj_Trim(aj_line_tmp) & Chr(13) & Chr(10)NextEnd Function Private Function getJSONValue(ByVal val)val = Trim(val)If Left(val,1) = ":"  Then val = Mid(val, 2)If Right(val,1) = "," Then val = Left(val, Len(val) - 1)val = Trim(val) Select Case valCase "true"  : getJSONValue = TrueCase "false" : getJSONValue = FalseCase "null" : getJSONValue = NullCase ElseIf (Instr(val, """") = 0) ThenIf IsNumeric(val) ThengetJSONValue = CDbl(val)ElsegetJSONValue = valEnd IfElseIf Left(val,1) = """" Then val = Mid(val, 2)If Right(val,1) = """" Then val = Left(val, Len(val) - 1)getJSONValue = aj_JSONDecode(Trim(val))End IfEnd SelectEnd Function Private JSONoutput_levelPublic Function JSONoutput()dim wrap_dicttype, aj_labelJSONoutput_level = 1wrap_dicttype = "[]"For Each aj_label In data If Not aj_IsInt(aj_label) Then wrap_dicttype = "{}"NextJSONoutput = Left(wrap_dicttype, 1) & Chr(13) & Chr(10) & GetDict(data) & Right(wrap_dicttype, 1)End Function Private Function GetDict(objDict)dim aj_item, aj_keyvals, aj_label, aj_dicttypeFor Each aj_item In objDictSelect Case TypeName(objDict.Item(aj_item))Case "Dictionary"GetDict = GetDict & Space(JSONoutput_level * 4)aj_dicttype = "[]"For Each aj_label In objDict.Item(aj_item).Keys If Not aj_IsInt(aj_label) Then aj_dicttype = "{}"NextIf aj_IsInt(aj_item) ThenGetDict = GetDict & (Left(aj_dicttype,1) & Chr(13) & Chr(10))ElseGetDict = GetDict & ("""" & aj_JSONEncode(aj_item) & """" & ": " & Left(aj_dicttype,1) & Chr(13) & Chr(10))End IfJSONoutput_level = JSONoutput_level + 1aj_keyvals = objDict.KeysGetDict = GetDict & (GetSubDict(objDict.Item(aj_item)) & Space(JSONoutput_level * 4) & Right(aj_dicttype,1) & aj_InlineIf(aj_item = aj_keyvals(objDict.Count - 1),"" , ",") & Chr(13) & Chr(10))Case Elseaj_keyvals =  objDict.KeysGetDict = GetDict & (Space(JSONoutput_level * 4) & aj_InlineIf(aj_IsInt(aj_item), "", """" & aj_JSONEncode(aj_item) & """: ") & WriteValue(objDict.Item(aj_item)) & aj_InlineIf(aj_item = aj_keyvals(objDict.Count - 1),"" , ",") & Chr(13) & Chr(10))End SelectNextEnd Function Private Function aj_IsInt(val)aj_IsInt = (TypeName(val) = "Integer" Or TypeName(val) = "Long")End Function Private Function GetSubDict(objSubDict)GetSubDict = GetDict(objSubDict)JSONoutput_level= JSONoutput_level -1End Function Private Function WriteValue(ByVal val)Select Case TypeName(val)Case "Double", "Integer", "Long": WriteValue = valCase "Null": WriteValue = "null"Case "Boolean": WriteValue = aj_InlineIf(val, "true", "false")Case Else: WriteValue = """" & aj_JSONEncode(val) & """"End SelectEnd Function Private Function aj_JSONEncode(ByVal val)val = Replace(val, "\", "\\")val = Replace(val, """", "\""")'val = Replace(val, "/", "\/")val = Replace(val, Chr(8), "\b")val = Replace(val, Chr(12), "\f")val = Replace(val, Chr(10), "\n")val = Replace(val, Chr(13), "\r")val = Replace(val, Chr(9), "\t")aj_JSONEncode = Trim(val)End Function Private Function aj_JSONDecode(ByVal val)val = Replace(val, "\""", """")val = Replace(val, "\\", "\")val = Replace(val, "\/", "/")val = Replace(val, "\b", Chr(8))val = Replace(val, "\f", Chr(12))val = Replace(val, "\n", Chr(10))val = Replace(val, "\r", Chr(13))val = Replace(val, "\t", Chr(9))aj_JSONDecode = Trim(val)End Function Private Function aj_InlineIf(condition, returntrue, returnfalse)If condition Then aj_InlineIf = returntrue Else aj_InlineIf = returnfalseEnd Function Private Function aj_Strip(ByVal val, stripper)If Left(val, 1) = stripper Then val = Mid(val, 2)If Right(val, 1) = stripper Then val = Left(val, Len(val) - 1)aj_Strip = valEnd Function Private Function aj_MultilineTrim(TextData)aj_MultilineTrim = aj_RegExp.Replace(TextData, "$1")End Function private function aj_Trim(val)aj_Trim = Trim(val)Do While Left(aj_Trim, 1) = Chr(9) : aj_Trim = Mid(aj_Trim, 2) : LoopDo While Right(aj_Trim, 1) = Chr(9) : aj_Trim = Left(aj_Trim, Len(aj_Trim) - 1) : Loopaj_Trim = Trim(aj_Trim)end functionEnd Class%>

AspJson官方使用方法参考

<%Set oJSON = New aspJSON 'Load JSON stringoJSON.loadJSON(jsonstring) 'Get single valueResponse.Write oJSON.data("firstName") & "
" 'Loop through collectionFor Each phonenr In oJSON.data("phoneNumber") Set this = oJSON.data("phoneNumber").item(phonenr) Response.Write _ this.item("type") & ": " & _ this.item("number") & "
"Next 'Update/Add valueoJSON.data("firstName") = "James" 'Return json stringResponse.Write oJSON.JSONoutput()%>

示例一—输出json

示例二—转换为json格式输出

读取数据库中article表数据,转换为json格式数据输出

dim oJSONSet oJSON = New aspJSONsql="Select * From article where IsSelected=1 and getdate() between isnull(showBeginTime,'1900-1-1 00:00:00') and isnull(showEndTime,getdate()) and (','+UserTypeNo+',' like '%,"&OAUserTypeNo&",%' or UserTypeNo='')" 'response.Write(sql)set rs=server.CreateObject("adodb.recordset")OpenConn : rs.open sql,Conn,1,3dim nn=0With oJSON.datado while not rs.eof .Add n, oJSON.Collection()With .item(n).Add "ID", ""&rs("ID")&"" .Add "Title", ""&rs("Title")&"" .Add "IsActivityTime", ""&rs("IsActivityTime")&"" .Add "activityBeginTime", ""&rs("activityBeginTime")&"" .Add "activityEndTime", ""&rs("activityEndTime")&""                      'Create valueEnd Withn=n+1rs.movenextloopEnd WithResponse.Write oJSON.JSONoutput()                   'Return json string

示例三—JS读取Json

前端js使用ajax调用后端接口,获取到上面的json数据,解析输出。

var postData="Action=Announce"//alert(postData)digtalMessage="";digtalMessageAll=""; $.ajax({   type: "GET",   url: "/OKOA/CN/AjaxInfo.asp",   data: postData,   success: function(msg){//alert( "Data Saved: " + msg );var obj = jQuery.parseJSON(msg);$.each(obj,function(idx,item){        //alert(item.activityBeginTime)   digtalMessage=DigitalTime1(item.Title,item.Title,item.activityBeginTime,item.activityEndTime);digtalMessageAll=digtalMessageAll+" "+digtalMessage+";"})document.getElementById("LiveClock1").innerHTML=digtalMessageAll;   }});

总结

到此这篇关于asp使用AspJson转换json数据的文章就介绍到这了,更多相关asp中的AspJson内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!