use*_*372 2 vba json ms-office
我知道可以使用像 VBAJSON 这样的库将数组或字典转换为 json,但不能使用 office 2013 中的自定义类实例。
搜索没有找到用于将对象处理为 json 的库,所以我认为必须有其他方法。
所以,我想知道:
是否可以将对象递归转换为字典,以便可以进行 to-json 转换,而不必为每个类编写冗长的自定义“ToDictionary”方法?
是否有另一种方式(除了不使用对象)可以从自定义类对象访问 json 输出?
目前,我已经为每个类编写了 ToDictionary 方法以将实例输出为字典。它很乱,但可以完成工作。
这是一个老问题,但没有答案,所以让我尝试用代码来回答。
我构建了一个函数来将 VBA 结构(使用字典)转换为 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
Run Code Online (Sandbox Code Playgroud)
测试:
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
Run Code Online (Sandbox Code Playgroud)
输出:
{
"Value1":"1",
"Value2":{
"SubValue1":"2.1",
"SubValue2":"2.2"
}
}
Run Code Online (Sandbox Code Playgroud)