服务热线:

4006-6500-28

新闻资讯
联系我们

电话:400-665-0028


您当前位置:首页 > 新闻资讯  > 知识学习 > 正文知识学习
k3wise插件开发过程中对象转JSON的函数
添加时间:2022-9-23

k3wise插件开发和调试过程中经常会遇到一些自定义的对象,如IDictionary、IVector、Recordset等,有的对象层层嵌套,而VB没有一个直观的方法查看这些对象的所有属性和值,就自己动手写了一个函数,代码如下,没怎么测试仅供参考


Public Function Object2Json(Optional ByVal vData As Variant) As String
    Dim sJson As String
	Dim vTemp As Variant
    On Error GoTo ErrL
    
    If InStr("String,Boolean,Date,Byte,Integer,Long,Double,Decimal", TypeName(vData)) > 0 Then
        sJson = "'" & Replace(CStr(vData), "'", "\'") & "'"
    ElseIf IsArray(vData) Then
        For vTemp = LBound(vData) To UBound(vData)
            sJson = sJson & Object2Json(vData(vTemp)) & ","
        Next
        sJson = IIf(Len(sJson) = 0, "[]", "[" & Mid(sJson, 1, Len(sJson) - 1) & "]")
    ElseIf TypeName(vData) = "IDictWord" Then
        sJson = vData.Name & ":" & Object2Json(vData.Value)
    ElseIf TypeName(vData) = "IDictionary" Then
        For Each vTemp In vData
            sJson = sJson & Object2Json(vTemp) & ","
        Next
        sJson = IIf(Len(sJson) = 0, "{}", "{" & Mid(sJson, 1, Len(sJson) - 1) & "}")
    ElseIf TypeName(vData) = "IVector" Then
        For vTemp = 1 To vData.Size
            sJson = sJson & Object2Json(vData.Item(vTemp)) & ","
        Next vTemp
        sJson = IIf(Len(sJson) = 0, "[]", "[" & Mid(sJson, 1, Len(sJson) - 1) & "]")
    ElseIf TypeName(vData) = "Recordset" Then
        vData.MoveFirst
        While Not vData.EOF
            sJson = sJson & "{"
            For vTemp = 0 To vData.Fields.Count - 1
                sJson = sJson & vData.Fields(vTemp).Name & ":" & Object2Json(vData.Fields(vData.Fields(vTemp).Name).Value) & ","
            Next
            sJson = Mid(sJson, 1, Len(sJson) - 1) & "},"
            vData.MoveNext
        Wend
        sJson = IIf(Len(sJson) = 0, "[]", "[" & Mid(sJson, 1, Len(sJson) - 1) & "]")
    Else
        GoTo ErrL
    End If
    
    Object2Json = sJson
    Exit Function
ErrL:
   Object2Json = "'#" & TypeName(vData) & "#'"
End Function