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