Страницы: 1
RSS
Вывод фигурной скобки при использовании ConvertToJson, Вывод фигурной скобки при использовании ConvertToJson
 
Если есть возможность, подскажите, пожалуйста, как изменить код в Книге3_1.xlsm, чтобы в генерируемом json после "relations" не выводились квадратные скобки, а выводились только фигурные скобки (см. скрин png)?
В блоке Types вместо "relation": {"table": "table1", "field": "field1", "displayField": "displayField1"} выдается все то же самое, но в дополнительных квадратных скобках [], потому что в цикле добавляется 'jsonDictionary4.Add "relation", jsonItems2' (и автоматически проставляются квадратные скобки). А в данном случае нужны именно {}, т.к. в них описывается объект json. [] вообще не нужны.


Код
For i = 2 To excelRange.Rows.Count 'Вывод блока Types
 If Cells(i, 4) = "id" Then
        If Cells(i, 7) <> "" Then
            jsonDictionary3("table") = Cells(i, 1)
            jsonDictionary3("field") = "id"
            jsonDictionary3("displayField") = "id"
            jsonItems2.Add jsonDictionary3
            Set jsonDictionary3 = Nothing
            
            jsonDictionary4("name") = Cells(i, 7)
            jsonDictionary4("type") = "SysRelation"
            jsonDictionary4("displayName") = Cells(i, 2)
            jsonDictionary4.Add "relation", jsonItems2
            jsonItems3.Add jsonDictionary4
            Set jsonDictionary4 = Nothing
            Set jsonItems2 = Nothing
        'Else: MsgBox ("Некорректно заполнен id в строке " & i)
        End If
 End If
Next i
Перепробованы разные варианты сочетания коллекций, словарей.
Ссылка на ConvertToJson: https://github.com/VBA-tools/VBA-JSON


Прикреплены файлы:

Книга3_1.xlsm - с кодом процедуры
Скрин.png - на скриншоте выделены [], которых не должно быть
JsonExample1.zip - сформированный Json.
 
А по какой причине нужно убрать скобки, это же вроде стандартный формат файла Json? Скобки , как бы показывают, что "relation" содержит массив данных.
Изменено: Nordheim - 27.04.2020 11:56:48
"Все гениальное просто, а все простое гениально!!!"
 
Добрый день! Стандарт Json предусматривает использование:
  • объектов: ноль или более пар ключ:значение (name/value) внутри фигурных скобок. Пары разделяются запятыми
  • массивов: ноль или более значений (values) внутри квадратных скобок. Значения разделяются запятыми.
Автор модуля JsonConverter Тим Холл решил для объектов использовать класс VBA Dictionary (есть в проекте из #1), для массивов - стандартный объект VBA Collection.

В строке 13 из #1 Вы в объект добавляете пару с ключом "relation" и значением, которое содержится в коллекции jsonItems2, соответственно, это значение и выводится как массив.

P.S. В примере исправил.  
Изменено: sokol92 - 27.04.2020 15:20:43
Владимир
 
sokol92, большое спасибо!!
Вот, оказывается, как надо было:
Код
jsonDictionary4.Add "relation", jsonDictionary3
Я пыталась сделать что-то подобное, но высвечивалась ошибка из-за неправильного применения скобок:
Код
jsonDictionary4.Add ("relation", jsonDictionary3)
 
Nordheim, т.к. в данном случае требовалось описать объект.
Страницы: 1
Наверх