Имя: Пароль:
1C
 
Запись JSON. Не могу записать структуру
,
0 mr_K
 
17.05.23
09:42
Нужно записать вот такой блок:
"Organization":
{
"ContractorId": "00000000-0000-0000-0000-000000000000",
"INN": null,
"ContractorName": null
}
Записать просто свойство, массив объектов - без проблем. А тут - не могу понять логику.
2 mr_K
 
17.05.23
09:44
ЗаписатьНачалоОбъекта()
...
ЗаписатьКонецОбъекта()
даст вот такое:
{
"ContractorId": "00000000-0000-0000-0000-000000000000",
"INN": null,
"ContractorName": null
}
ЗаписатьИмяСвойства("Organization");
ЗаписатьНачалоОбъекта()
...
ЗаписатьКонецОбъекта()
Ругается при записи json
4 mr_K
 
17.05.23
09:47
(1) Чет я сомневаюсь, что он сериализует структуру, без явной сериализации.
ЗаписатьJSON(Запись, СтруктураОрганизации) - тоже дает
{
"ContractorId": "00000000-0000-0000-0000-000000000000",
"INN": null,
"ContractorName": null
}
но без имени свойства.
5 mr_K
 
17.05.23
09:48
ЗаписатьИмяСвойства("Organization");
ЗаписатьJSON(Запись, СтруктураОрганизации);
Ругается так же, как и на код из (0)
7 mr_K
 
17.05.23
09:51
(6) Да, наверное так. Спасибо!
8 OldCondom
 
17.05.23
10:42
ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", Истина);
Запись = Новый ЗаписьJSON;
Запись.ПроверятьСтруктуру = Истина;
Запись.ОткрытьФайл("c:\temp\streamWrite.json", , , ПараметрыJSON);
Запись.ЗаписатьНачалоОбъекта();
Запись.ЗаписатьИмяСвойства("ДлинаЗаписи");
Запись.ЗаписатьЗначение(20);
Запись.ЗаписатьИмяСвойства("Товар");
Запись.ЗаписатьНачалоОбъекта();
Запись.ЗаписатьИмяСвойства("Код");
Запись.ЗаписатьЗначение("0020");
Запись.ЗаписатьИмяСвойства("Наименование");
Запись.ЗаписатьЗначение("Товар");
Запись.ЗаписатьКонецОбъекта();
Запись.ЗаписатьИмяСвойства("МассивЧисел");
Запись.ЗаписатьНачалоМассива();
Запись.ЗаписатьЗначение(3.141592654, Истина);
Запись.ЗаписатьЗначение(2.718281828, Ложь);
Запись.ЗаписатьКонецМассива();
Запись.ЗаписатьКонецОбъекта();
Запись.Закрыть();
В результате исполнения этого программного кода будет сформирован следующий документ:

Копировать в буфер обмена
{
"ДлинаЗаписи": 20,
"Товар": {
  "Код": "0020",
  "Наименование": "Товар"
},
"МассивЧисел": [
  3.141592654E0,
  2.718281828
]
}
9 OldCondom
 
17.05.23
10:42
10 OldCondom
 
17.05.23
10:42
(3) Объектная запись не всегда к месту
12 OldCondom
 
17.05.23
10:47
(11) например случай ТС. Когда по ТЗ надо передать определенный формат, аналогов которого в объектной модели 1С нет.
Есть еще пример с огромными массивами данных, когда памяти не хватает.
13 OldCondom
 
17.05.23
10:50
Еще вспомнил: альфа банк шлет по своей api просто огромный массив данных, формат разумеется своеобразный. С объектной моделью вряд ли что получится
14 Donkey_hot
 
17.05.23
10:53
(12) В объектной модели 1С нет структуры, содержащей в качестве значения структуру?
16 OldCondom
 
17.05.23
11:01
(14) Есть. Вопрос в чем? Впихните структуру в структуру и посмотрите, что на выходе будет.
Подсказка
"Organization":
{
{"ContractorId": "00000000-0000-0000-0000-000000000000"},
{"INN": null},
{"ContractorName": null}
}
17 OldCondom
 
17.05.23
11:02
(15) Я про объектный, которым и является ЗаписатьJSON()
18 Donkey_hot
 
17.05.23
11:13
(16) РеквизитыОрганизации = Новый Структура;
    РеквизитыОрганизации.Вставить("Реквизит1", "Значение1");
    РеквизитыОрганизации.Вставить("Реквизит2", "Значение2");
    РеквизитыОрганизации.Вставить("Реквизит3", "Значение3");
    
    Результат = Новый Структура("Организация", РеквизитыОрганизации);
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON, Результат);
    РезультатСтрокой = ЗаписьJSON.Закрыть();
    
    Сообщить(РезультатСтрокой);
19 Donkey_hot
 
17.05.23
11:13
(18) {
"Организация": {
"Реквизит1": "Значение1",
"Реквизит2": "Значение2",
"Реквизит3": "Значение3"
}
}
20 OldCondom
 
17.05.23
11:16
(18) а что-то я про одну структуру не подумал) Ну, тогда остается память
21 lexushka
 
17.05.23
17:20
Полагаю, что дело в том что JSON любит иметь дело с простыми типами
NULL — не простой тип
Поставьте вместо NULL  ""
Должно помочь
22 Donkey_hot
 
18.05.23
10:02
(21) null не прост, совсем не прост... нельзя в нем скрыться от бурь и от гроз...
23 arsik
 
гуру
18.05.23
10:28
(21) Нет. Пустая строка преобразуется в пустую строку. Нужно использовать Неопределено.


стр = Новый Структура("стр1",
    Новый Структура("а1,а2,а3",
        "23423",
        Неопределено,
        ""
    )
);

ЗаписьJSON = Новый ЗаписьJSON;            
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON,Стр);            
Результат =  ЗаписьJSON.Закрыть();



{
"стр1": {
"а1": "23423",
"а2": null,
"а3": ""
}
}
24 Волшебник
 
18.05.23
10:44
(23) Неопределено преобразуется в null
Красиво
25 НЕА123
 
18.05.23
11:13
а где ж Ненавижу1С?
26 НЕА123
 
18.05.23
11:14
+
на (24) обязан Ненавижу1С появиться.
27 Волшебник
 
18.05.23
11:25
(26) Он тихонько плачет в сторонке
28 Anton1307
 
18.05.23
11:54
Функция ЗначениеВСтрокуJSON(Значение) Экспорт
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON( , "  "));
    ЗаписатьJSON(ЗаписьJSON, Значение);
    Возврат ЗаписьJSON.Закрыть();
    
КонецФункции // ЗначениеВСтрокуJSON()