售后技术专线:4006-6500-28
新购有特价、金蝶老客户升级金蝶云产品可以享受5折优惠,送手机、送话费,好礼不断!
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
截屏,微信识别二维码
客服QQ:1250556403
(点击QQ号复制,添加好友)