LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

asp使用AspJson转换json数据

admin
2024年12月12日 17:7 本文热度 245

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

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

%>

示例一—输出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

%>

示例二—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+" <a class=\"Default\" onClick=\"OpenWin('/OKOA/Announce.asp?ID="+item.ID+"','Annonce_"+item.ID+"')\" href=\"#\">"+digtalMessage+"</a>;"

    })

    document.getElementById("LiveClock1").innerHTML=digtalMessageAll;

   }

});

总结

到此这篇关于asp使用AspJson转换json数据的文章就介绍到这了。


该文章在 2024/12/12 17:07:50 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved