我知道可以使用像VBAJSON这样的库将数组或字典转换为json,但不能使用Office 2013中的自定义类实例。
搜索没有向json处理对象的库,所以我认为必须有其他方法。
所以,我想知道:
是否有可能将对象递归转换为字典,以便可以进行to-json转换,而无需为每个类编写冗长的自定义“ToDictionary”方法?
还有另一种方法(不使用对象)可以从自定义类对象到达json输出吗?
目前,我已经为每个类编写了ToDictionary方法,以将实例输出为字典。它太乱了,但完成了工作。
答案 0 :(得分:2)
这是一个老问题,但没有答案,所以让我尝试用代码回答。
我构建了一个将VBA结构(使用Dictionary)转换为JSON的函数。此函数接受嵌套对象(嵌套字典):
Function ToJson(ByVal dict As Object) As String
Dim key As Variant, result As String, value As String
result = "{"
For Each key In dict.Keys
result = result & IIf(Len(result) > 1, ",", "")
If TypeName(dict(key)) = "Dictionary" Then
value = ToJson(dict(key))
ToJson = value
Else
value = """" & dict(key) & """"
End If
result = result & """" & key & """:" & value & ""
Next key
result = result & "}"
ToJson = result
End Function
测试:
Sub MyTest()
Dim body As String
Set dictSubValues = CreateObject("Scripting.Dictionary")
Set dictBody = CreateObject("Scripting.Dictionary")
dictSubValues.Add "SubValue1", "2.1"
dictSubValues.Add "SubValue2", "2.2"
dictBody.Add "Value1", "1"
dictBody.Add "Value2", dictSubValues
body = ToJson(dictBody)
Debug.Print (body)
End Sub
输出:
{
"Value1":"1",
"Value2":{
"SubValue1":"2.1",
"SubValue2":"2.2"
}
}
答案 1 :(得分:0)
当我第一次开始写这个问题时,我被置于正确的状态。然后我有一个灯泡时刻为类编写一个ToDictionary方法,将对象转换为我想要的字典。
类似于:
public function ToDictionary() as string
dim d as dictionary
set d = new dictionary
d.add "id" Me!id
d.add "title" Me!title
...
Set ToDictionary = d
set d = Nothing
end function