|
Запись 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) Нет. Пустая строка преобразуется в пустую строку. Нужно использовать Неопределено.
|
|||
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() |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |