2015-10-10 2 views
1

Я знаю, что можно использовать библиотеку как VBAJSON преобразовать массив или словарь в JSON, но не экземпляр пользовательского класса в офисе 2013.Преобразование объектов в JSON в VBA

Searching поворачивает вверх не библиотеки для обработки объекты для json, поэтому я считаю, что должен быть какой-то другой способ.

Итак, я задаюсь вопросом:

  • возможно для объекта рекурсивно преобразуется в словарь, преобразование к JSON затем может произойти, без необходимости писать длинный обычай «ToDictionary «метод для каждого класса?

  • Есть ли другой способ (кроме использования объектов), что выход json может быть достигнут из пользовательских объектов класса?

    На данный момент я написал методы ToDictionary для каждого класса для вывода экземпляра в качестве словаря. Это грязно, но выполняет свою работу.

+0

я наткнулся на [это] (http://ramblings.mcpher.com/Home/excelquirks/classserialization) недавно, но не прошли дальше, чем беглый обзор. С первого взгляда, похоже, это может быть то, что вы ищете. –

+0

Я тоже видел это, из того, что я мог видеть, он использует пользовательский «объект» 'CObject' или такой, который по существу является словарем, который передается в функцию преобразования json. – user3791372

+0

Хммм, я выглядел немного ближе (но все еще не близко достаточно), мое первое впечатление было то, что это была общая функция Stringify, но теперь я думаю, что, возможно, она специфична только для одного конкретного класса. –

ответ

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 
0

Это старый вопрос, но без ответа, так что позвольте мне попытаться ответить с кодом.

Я построил функцию преобразования структуры 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 

Тест:

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" 
    } 
} 
Смежные вопросы