asp使用AspJson轉(zhuǎn)換json數(shù)據(jù)
需要使用json數(shù)據(jù)的場(chǎng)景很多,那么asp中如何操作json數(shù)據(jù)呢?asp與json格式又如何交互呢?本文介紹使用AspJson轉(zhuǎn)換為json格式數(shù)據(jù)輸出,以及解析json數(shù)據(jù)。
aspJSON1.17.asp文件
<% 'Februari 2014 - Version 1.17 by Gerrit van Kuipers Class aspJSON Public data Private p_JSONstring private aj_in_string, aj_in_escape, aj_i_tmp, aj_char_tmp, aj_s_tmp, aj_line_tmp, aj_line, aj_lines, aj_currentlevel, aj_currentkey, aj_currentvalue, aj_newlabel, aj_XmlHttp, aj_RegExp, aj_colonfound Private Sub Class_Initialize() Set data = Collection() Set aj_RegExp = new regexp aj_RegExp.Pattern = "\s{0,}(\S{1}[\s,\S]*\S{1})\s{0,}" aj_RegExp.Global = False aj_RegExp.IgnoreCase = True aj_RegExp.Multiline = True End Sub Private Sub Class_Terminate() Set data = Nothing Set aj_RegExp = Nothing End Sub Public Sub loadJSON(inputsource) inputsource = aj_MultilineTrim(inputsource) If Len(inputsource) = 0 Then Err.Raise 1, "loadJSON Error", "No data to load." select case Left(inputsource, 1) case "{", "[" case else Set aj_XmlHttp = Server.CreateObject("Msxml2.ServerXMLHTTP") aj_XmlHttp.open "GET", inputsource, False aj_XmlHttp.setRequestHeader "Content-Type", "text/json" aj_XmlHttp.setRequestHeader "CharSet", "UTF-8" aj_XmlHttp.Send inputsource = aj_XmlHttp.responseText set aj_XmlHttp = Nothing end select p_JSONstring = CleanUpJSONstring(inputsource) aj_lines = Split(p_JSONstring, Chr(13) & Chr(10)) Dim level(99) aj_currentlevel = 1 Set level(aj_currentlevel) = data For Each aj_line In aj_lines aj_currentkey = "" aj_currentvalue = "" If Instr(aj_line, ":") > 0 Then aj_in_string = False aj_in_escape = False aj_colonfound = False For aj_i_tmp = 1 To Len(aj_line) If aj_in_escape Then aj_in_escape = False Else Select Case Mid(aj_line, aj_i_tmp, 1) Case """" aj_in_string = Not aj_in_string Case ":" If Not aj_in_escape And Not aj_in_string Then aj_currentkey = Left(aj_line, aj_i_tmp - 1) aj_currentvalue = Mid(aj_line, aj_i_tmp + 1) aj_colonfound = True Exit For End If Case "\" aj_in_escape = True End Select End If Next if aj_colonfound then aj_currentkey = aj_Strip(aj_JSONDecode(aj_currentkey), """") If Not level(aj_currentlevel).exists(aj_currentkey) Then level(aj_currentlevel).Add aj_currentkey, "" end if End If If right(aj_line,1) = "{" Or right(aj_line,1) = "[" Then If Len(aj_currentkey) = 0 Then aj_currentkey = level(aj_currentlevel).Count Set level(aj_currentlevel).Item(aj_currentkey) = Collection() Set level(aj_currentlevel + 1) = level(aj_currentlevel).Item(aj_currentkey) aj_currentlevel = aj_currentlevel + 1 aj_currentkey = "" ElseIf right(aj_line,1) = "}" Or right(aj_line,1) = "]" or right(aj_line,2) = "}," Or right(aj_line,2) = "]," Then aj_currentlevel = aj_currentlevel - 1 ElseIf Len(Trim(aj_line)) > 0 Then if Len(aj_currentvalue) = 0 Then aj_currentvalue = aj_line aj_currentvalue = getJSONValue(aj_currentvalue) If Len(aj_currentkey) = 0 Then aj_currentkey = level(aj_currentlevel).Count level(aj_currentlevel).Item(aj_currentkey) = aj_currentvalue End If Next End 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.Count dictobj.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 Then aj_in_escape = False aj_s_tmp = aj_s_tmp & aj_char_tmp Else Select Case aj_char_tmp Case "\" : aj_s_tmp = aj_s_tmp & aj_char_tmp : aj_in_escape = True Case """" : aj_s_tmp = aj_s_tmp & aj_char_tmp : aj_in_string = Not aj_in_string Case "{", "[" 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_tmp Case "," : 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_tmp End Select End If Next CleanUpJSONstring = "" aj_s_tmp = split(aj_s_tmp, Chr(13) & Chr(10)) For Each aj_line_tmp In aj_s_tmp aj_line_tmp = replace(replace(aj_line_tmp, chr(10), ""), chr(13), "") CleanUpJSONstring = CleanUpJSONstring & aj_Trim(aj_line_tmp) & Chr(13) & Chr(10) Next End 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 val Case "true" : getJSONValue = True Case "false" : getJSONValue = False Case "null" : getJSONValue = Null Case Else If (Instr(val, """") = 0) Then If IsNumeric(val) Then getJSONValue = CDbl(val) Else getJSONValue = val End If Else If 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 If End Select End Function Private JSONoutput_level Public Function JSONoutput() dim wrap_dicttype, aj_label JSONoutput_level = 1 wrap_dicttype = "[]" For Each aj_label In data If Not aj_IsInt(aj_label) Then wrap_dicttype = "{}" Next JSONoutput = 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_dicttype For Each aj_item In objDict Select 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 = "{}" Next If aj_IsInt(aj_item) Then GetDict = GetDict & (Left(aj_dicttype,1) & Chr(13) & Chr(10)) Else GetDict = GetDict & ("""" & aj_JSONEncode(aj_item) & """" & ": " & Left(aj_dicttype,1) & Chr(13) & Chr(10)) End If JSONoutput_level = JSONoutput_level + 1 aj_keyvals = objDict.Keys GetDict = 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 Else aj_keyvals = objDict.Keys GetDict = 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 Select Next End 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 -1 End Function Private Function WriteValue(ByVal val) Select Case TypeName(val) Case "Double", "Integer", "Long": WriteValue = val Case "Null" : WriteValue = "null" Case "Boolean" : WriteValue = aj_InlineIf(val, "true", "false") Case Else : WriteValue = """" & aj_JSONEncode(val) & """" End Select End 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 = returnfalse End 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 = val End 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) : Loop Do While Right(aj_Trim, 1) = Chr(9) : aj_Trim = Left(aj_Trim, Len(aj_Trim) - 1) : Loop aj_Trim = Trim(aj_Trim) end function End Class %>
AspJson官方使用方法參考
示例一—輸出json
<!--#include virtual="/aspJSON1.17.asp" --> <% Set oJSON = New aspJSON With oJSON.data .Add "familyName", "Smith" 'Create value .Add "familyMembers", oJSON.Collection() With oJSON.data("familyMembers") .Add 0, oJSON.Collection() 'Create object With .item(0) .Add "firstName", "John" .Add "age", 41 End With .Add 1, oJSON.Collection() With .item(1) .Add "firstName", "Suzan" .Add "age", 38 .Add "interests", oJSON.Collection() 'Create array With .item("interests") .Add 0, "Reading" .Add 1, "Tennis" .Add 2, "Painting" End With End With .Add 2, oJSON.Collection() With .item(2) .Add "firstName", "John Jr." .Add "age", 2.5 End With End With End With Response.Write oJSON.JSONoutput() 'Return json string %>
示例二—轉(zhuǎn)換為json格式輸出
讀取數(shù)據(jù)庫(kù)中article表數(shù)據(jù),轉(zhuǎn)換為json格式數(shù)據(jù)輸出
示例三—JS讀取Json
前端js使用ajax調(diào)用后端接口,獲取到上面的json數(shù)據(jù),解析輸出。
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+" <a class=\"Default\" onClick=\"OpenWin('/OKOA/Announce.asp?ID="+item.ID+"','Annonce_"+item.ID+"')\" href=\"#\">"+digtalMessage+"</a>;" }) document.getElementById("LiveClock1").innerHTML=digtalMessageAll; } });
總結(jié)
到此這篇關(guān)于asp使用AspJson轉(zhuǎn)換json數(shù)據(jù)的文章就介紹到這了,更多相關(guān)asp中的AspJson內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
動(dòng)網(wǎng)論壇驗(yàn)證碼改進(jìn) 加法驗(yàn)證碼(ASPJpeg版)
很多站長(zhǎng)都為論壇里太多的垃圾廣告抓狂,本程序就是為了對(duì)付論壇垃圾廣告群發(fā)器的。 將驗(yàn)證碼改為加法運(yùn)算,比如驗(yàn)證碼顯示“25+64等于?”,那么輸入“91”就能通過(guò)驗(yàn)證。2008-11-11ByVal和ByRef(編寫(xiě)ASP子程序所用到命令)
ByRef 傳送參數(shù)內(nèi)存的實(shí)際地址給被調(diào)用者。也就是說(shuō),棧中壓入的是實(shí)際內(nèi)容的地址。被調(diào)用者可以直接更改該地址中的內(nèi)容。2006-08-08asp 數(shù)組 重復(fù)刪除函數(shù)(腳本之家增強(qiáng)版)
這篇文章是asp下刪除重復(fù)數(shù)組的函數(shù),已經(jīng)經(jīng)過(guò)測(cè)試。2010-05-05asp隔行換色實(shí)現(xiàn)代碼(表格或者列表)
在ASP(Active Server Pages)中實(shí)現(xiàn)隔行變色通常涉及到對(duì)HTML表格或列表進(jìn)行樣式設(shè)置,ASP本身主要用于服務(wù)器端腳本處理,而具體的樣式(如顏色變化)通常通過(guò)HTML和CSS來(lái)實(shí)現(xiàn),下面是一些常見(jiàn)的方法來(lái)實(shí)現(xiàn)這一功能2025-03-03asp怎么獲取毫秒數(shù)實(shí)現(xiàn)代碼
得到17位的當(dāng)前時(shí)間如:20091210105237238=2009年12月10日10:52:37:238,接下來(lái)在獲取毫秒數(shù),感興趣的朋友可以參考下哈,希望可以幫助到你2013-04-04