Имя: Пароль:
1C
 
Форматирование JSON
,
0 MetalZOne
 
21.12.16
16:35
Вот код, которым формирую JSON:

ВыборкаНоменклатуры = ЗапросНоменклатура.Выполнить().Выбрать();
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(,Символы.Таб);
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
ЗаписьJSON.ЗаписатьНачалоОбъекта();
Пока ВыборкаНоменклатуры.Следующий() Цикл
        
    ЗаписьJSON.ЗаписатьНачалоОбъекта();
    ЗаписьJSON.ЗаписатьИмяСвойства("Товар");
    ЗаписьJSON.ЗаписатьЗначение(""+ВыборкаНоменклатуры.Ссылка.УникальныйИдентификатор()+"");
    ЗаписьJSON.ЗаписатьНачалоМассива();
        
    ЗаписьJSON.ЗаписатьИмяСвойства("ЭтоГруппа");
    ЗаписьJSON.ЗаписатьЗначение(ВыборкаНоменклатуры.СсылкаЭтоГруппа);
        
    ЗаписьJSON.ЗаписатьИмяСвойства("Наименование");
    ЗаписьJSON.ЗаписатьЗначение(ВыборкаНоменклатуры.Ссылка.Наименование);
        
    ЗаписьJSON.ЗаписатьИмяСвойства("РодительИД");
    ЗаписьJSON.ЗаписатьЗначение(""+ВыборкаНоменклатуры.СсылкаРодитель.УникальныйИдентификатор()+"");
                
    ЗаписьJSON.ЗаписатьКонецМассива();
        
    ЗаписьJSON.ЗаписатьКонецОбъекта();
КонецЦикла;
    
ЗаписьJSON.ЗаписатьКонецОбъекта();
Данные = ЗаписьJSON.Закрыть();


В результате получаю такое форматирование:

{
    {
    "Товар": "0e593c94-863d-11e2-8240-005056c00008",
    [,
    "ЭтоГруппа": false,
    "Наименование": "Электроэнергия",
    "РодительИД": "e8a71fc6-55bc-11d9-848a-00112f43529a"
    ]
},
{,
"Товар": ,
"acd17b71-8666-11e2-8240-005056c00008",
[,
"ЭтоГруппа": ,
true,
"Наименование": ,
"Расходные материалы",
"РодительИД": ,
"00000000-0000-0000-0000-000000000000"
]
}......
......


Почему после первой итерации форматирование сбивается?
1 Cool_Profi
 
21.12.16
16:38
А зачем тебе в машинно-читаемом файле какое-то форматирование?
2 MetalZOne
 
21.12.16
16:39
(1) потому что я не знаю как его будут читать, библиотекой или ручками перебирать строки....
3 Cool_Profi
 
21.12.16
16:39
(2) Ручками перебирать файл, предназначенный для программной обработки?
4 Вафель
 
21.12.16
18:14
вместо таба сделай 4 пробела или 2
5 Помогите
 
21.12.16
20:42
(0) Если все равно ты все свойства и значения записываешь в цикле отдельными командами, а не сразу готовой структурой, то лучше записывай их в файл просто текстом, не используй "ЗаписьJSON". Объект ЗаписьJSON не для этого предназначен.
И вообще не логично отдельными командами писать ИмяСвойства и Значение.
6 Помогите
 
21.12.16
20:44
(0) И еще, почему в цикле ты записываешь объекты в объект, а не в массив?
7 GedKo
 
21.12.16
21:06
млин, зачем париться с форматированием для пользователя? может пользователю дать удобный инстумент для просмотра такого файла?
8 Помогите
 
21.12.16
22:06
(7) Он не знает как его будут читать. Видимо пользователи чужие, и ничего им дать нельзя.
9 PLUT
 
21.12.16
22:20
(8) читайте на здоровье

http://www.jsoneditoronline.org/
10 Garykom
 
гуру
21.12.16
22:28
(0) Сбивается потому что кто то вместо валидного JSON какую то х создает
Вот это

[,
    "ЭтоГруппа": false,
    "Наименование": "Электроэнергия",
    "РодительИД": "e8a71fc6-55bc-11d9-848a-00112f43529a"
]

что?

В массив это упорядоченный список чего то (объектов к примеру) а не свойств именованных. Правильнее

[{},
    {"ЭтоГруппа": false},
    {"Наименование": "Электроэнергия"},
    {"РодительИД": "e8a71fc6-55bc-11d9-848a-00112f43529a"}
]
11 Помогите
 
21.12.16
22:28
(9) Ты это мне написал?
12 alexhtn
 
21.12.16
23:32
(0) На мой взгляд, сформированный файл выглядит немного нелогично.
Попробуй перед вызовом ЗаписьJSON.ЗаписатьНачалоМассива() добавить ЗаписьJSON.ЗаписатьИмяСвойства("Реквизиты")
Либо более правильный вариант:

ЗаписьJSON.ЗаписатьНачалоМассива();
Пока ВыборкаНоменклатуры.Следующий() Цикл
    ЗаписьJSON.ЗаписатьНачалоОбъекта();

    ЗаписьJSON.ЗаписатьИмяСвойства("Товар");
    ЗаписьJSON.ЗаписатьЗначение(""+ВыборкаНоменклатуры.Ссылка.УникальныйИдентификатор()+"");
        
    ЗаписьJSON.ЗаписатьИмяСвойства("ЭтоГруппа");
    ЗаписьJSON.ЗаписатьЗначение(ВыборкаНоменклатуры.СсылкаЭтоГруппа);
        
    ЗаписьJSON.ЗаписатьИмяСвойства("Наименование");
    ЗаписьJSON.ЗаписатьЗначение(ВыборкаНоменклатуры.Ссылка.Наименование);
        
    ЗаписьJSON.ЗаписатьИмяСвойства("РодительИД");
    ЗаписьJSON.ЗаписатьЗначение(""+ВыборкаНоменклатуры.СсылкаРодитель.УникальныйИдентификатор()+"");
                        
    ЗаписьJSON.ЗаписатьКонецОбъекта();
КонецЦикла;
ЗаписьJSON.ЗаписатьКонецМассива();