asp读取数据库关联的2个表之间的数据并以JSON格式输出

ASP   2025-02-27 17:54   55   0  

输出数组格式

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
'通义千问
' 定义连接数据库的函数(假设使用的是Access或SQL Server数据库)
Function OpenDB()
    Dim conn
    Set conn = Server.CreateObject("ADODB.Connection")
    ' 替换为你的数据库连接字符串
    conn.Open "Provider=SQLOLEDB;Data Source=(local);Initial Catalog=db;User ID=sa;Password=123456;"
    Set OpenDB = conn
End Function

' 关闭数据库连接的函数
Sub CloseDB(conn)
    If IsObject(conn) Then
        conn.Close
        Set conn = Nothing
    End If
End Sub

' 主程序开始
Dim conn, rsParent, rsChild, parentId, parentName, childId, childTitle
Dim resultArray, parentIndex

' 初始化结果数组
parentIndex = 0
ReDim resultArray(0)

' 打开数据库连接
Set conn = OpenDB()

' 查询父类数据
sqlParent = "select id, MingCheng from BDClass where ParentID='1' order by orders"
Set rsParent = conn.Execute(sqlParent)

If Not rsParent.EOF Then
    Do While Not rsParent.EOF
        parentId = rsParent("id")
        parentName = rsParent("MingCheng")

        ' 创建一个空的子类数组
        Dim childArray
        ReDim childArray(0)

        ' 查询子类产品数据
        sqlChild = "select C.Comid, C.Title, C.OutUrl, C.TJtitle, C.Logo, C.ZSstar " & _
                   "from BDcompany T, Company C " & _
                   "where T.Comid=C.Comid and C.IsPass=1 and T.classid='" & parentId & "' " & _
                   "order by Orders, T.AddTime desc, T.ID desc"

        Set rsChild = conn.Execute(sqlChild)

        If Not rsChild.EOF Then
            Dim childIndex
            childIndex = 0

            Do While Not rsChild.EOF
                childId = rsChild("Comid")
                childTitle = rsChild("Title")

                ' 将子类信息存储到子类数组中
                ReDim Preserve childArray(childIndex)
                childArray(childIndex) = Array(childId, childTitle, rsChild("OutUrl"), rsChild("TJtitle"), rsChild("Logo"), rsChild("ZSstar"))

                childIndex = childIndex + 1
                rsChild.MoveNext
            Loop
        End If

        ' 关闭子类记录集
        If IsObject(rsChild) Then rsChild.Close

        ' 将父类和子类数据合并到结果数组中
        ReDim Preserve resultArray(parentIndex)
        resultArray(parentIndex) = Array(parentId, parentName, childArray)

        parentIndex = parentIndex + 1
        rsParent.MoveNext
    Loop
End If

' 关闭父类记录集和数据库连接
If IsObject(rsParent) Then rsParent.Close
Call CloseDB(conn)

' 输出结果数组(仅用于调试)
For i = 0 To UBound(resultArray)
    Response.Write "Parent ID: " & resultArray(i)(0) & ", Name: " & resultArray(i)(1) & "<br>"
    For j = 0 To UBound(resultArray(i)(2))
        Response.Write "&nbsp;&nbsp;Child ID: " & resultArray(i)(2)(j)(0) & ", Title: " & resultArray(i)(2)(j)(1) & "<br>"
    Next
Next
%>


输出JSON格式

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
'通义千问,以JSON格式输出
' 定义连接数据库的函数(假设使用的是Access或SQL Server数据库)
Function OpenDB()
    Dim conn
    Set conn = Server.CreateObject("ADODB.Connection")
    ' 替换为你的数据库连接字符串
    conn.Open "Provider=SQLOLEDB;Data Source=(local);Initial Catalog=db;User ID=sa;Password=123456;"
    Set OpenDB = conn
End Function

' 关闭数据库连接的函数
Sub CloseDB(conn)
    If IsObject(conn) Then
        conn.Close
        Set conn = Nothing
    End If
End Sub

' 自定义 Nz 函数:处理 Null 值
Function Nz(value, defaultValue)
    If IsNull(value) Or value = "" Then
        Nz = defaultValue
    Else
        Nz = value
    End If
End Function

' 主程序开始
Dim conn, rsParent, rsChild, parentId, parentName, childId, childTitle
Dim resultArray, parentIndex

' 初始化结果数组
parentIndex = 0
ReDim resultArray(0)

' 打开数据库连接
Set conn = OpenDB()

' 查询父类数据
sqlParent = "select id, MingCheng from BDClass where ParentID='1' order by orders"
Set rsParent = conn.Execute(sqlParent)

If Not rsParent.EOF Then
    Do While Not rsParent.EOF
        parentId = Nz(rsParent("id"), "")
        parentName = Nz(rsParent("MingCheng"), "")

        ' 创建一个空的子类数组
        Dim childArray
        ReDim childArray(0)

        ' 查询子类产品数据
        sqlChild = "select C.Comid, C.Title, C.OutUrl, C.TJtitle, C.Logo, C.ZSstar " & _
                   "from BDcompany T, Company C " & _
                   "where T.Comid=C.Comid and C.IsPass=1 and T.classid='" & parentId & "' " & _
                   "order by Orders, T.AddTime desc, T.ID desc"

        Set rsChild = conn.Execute(sqlChild)

        If Not rsChild.EOF Then
            Dim childIndex
            childIndex = 0

            Do While Not rsChild.EOF
                childId = Nz(rsChild("Comid"), "")
                childTitle = Nz(rsChild("Title"), "")

                ' 将子类信息存储到子类数组中
                ReDim Preserve childArray(childIndex)
                childArray(childIndex) = Array(childId, childTitle, Nz(rsChild("OutUrl"), ""), Nz(rsChild("TJtitle"), ""), Nz(rsChild("Logo"), ""), Nz(rsChild("ZSstar"), ""))

                childIndex = childIndex + 1
                rsChild.MoveNext
            Loop
        End If

        ' 关闭子类记录集
        If IsObject(rsChild) Then rsChild.Close

        ' 将父类和子类数据合并到结果数组中
        ReDim Preserve resultArray(parentIndex)
        resultArray(parentIndex) = Array(parentId, parentName, childArray)

        parentIndex = parentIndex + 1
        rsParent.MoveNext
    Loop
End If

' 关闭父类记录集和数据库连接
If IsObject(rsParent) Then rsParent.Close
Call CloseDB(conn)

' 构建 JSON 输出
Response.ContentType = "application/json"
Response.Charset = "UTF-8"

Dim jsonOutput
jsonOutput = "{""data"":" & GetJson(resultArray) & "}"

Response.Write jsonOutput

' 辅助函数:将数组转换为 JSON 字符串
Function GetJson(dataArray)
    Dim i, j
    Dim jsonArray, childJsonArray

    jsonArray = "["

    For i = 0 To UBound(dataArray)
        jsonArray = jsonArray & "{"
        jsonArray = jsonArray & """id"":""" & EscapeJson(dataArray(i)(0)) & ""","
        jsonArray = jsonArray & """name"":""" & EscapeJson(dataArray(i)(1)) & ""","
        jsonArray = jsonArray & """children"":" & GetChildJson(dataArray(i)(2)) & "}"
        
        If i < UBound(dataArray) Then
            jsonArray = jsonArray & ","
        End If
    Next

    jsonArray = jsonArray & "]"
    GetJson = jsonArray
End Function

' 辅助函数:将子类数组转换为 JSON 字符串
Function GetChildJson(childArray)
    Dim j
    Dim childJsonArray

    If IsEmpty(childArray) Or UBound(childArray) = -1 Then
        GetChildJson = "[]"
        Exit Function
    End If

    childJsonArray = "["

    For j = 0 To UBound(childArray)
        childJsonArray = childJsonArray & "{"
        childJsonArray = childJsonArray & """id"":""" & EscapeJson(childArray(j)(0)) & ""","
        childJsonArray = childJsonArray & """title"":""" & EscapeJson(childArray(j)(1)) & ""","
        childJsonArray = childJsonArray & """outUrl"":""" & EscapeJson(childArray(j)(2)) & ""","
        childJsonArray = childJsonArray & """tjTitle"":""" & EscapeJson(childArray(j)(3)) & ""","
        childJsonArray = childJsonArray & """logo"":""" & EscapeJson(childArray(j)(4)) & ""","
        childJsonArray = childJsonArray & """zsStar"":""" & EscapeJson(childArray(j)(5)) & """}"

        If j < UBound(childArray) Then
            childJsonArray = childJsonArray & ","
        End If
    Next

    childJsonArray = childJsonArray & "]"
    GetChildJson = childJsonArray
End Function

' 辅助函数:转义 JSON 字符串中的特殊字符
Function EscapeJson(strValue)
    If IsNull(strValue) Or strValue = "" Then
        EscapeJson = ""
    Else
        strValue = Replace(strValue, "\", "\\") ' 转义反斜杠
        strValue = Replace(strValue, """", "\""") ' 转义双引号
        strValue = Replace(strValue, vbCr, "\r") ' 转义回车符
        strValue = Replace(strValue, vbLf, "\n") ' 转义换行符
        EscapeJson = strValue
    End If
End Function
%>


博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。