Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Сохранение объекта XDTO в json

Сохранение объекта XDTO  в json
Я
   azernot
 
26.06.20 - 15:51
Господа, столкнулся с неожиданной проблемой.

Есть пакет XDTO из которого идёт сохранение в XML
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.Отступ = Истина;
    ЗаписьXML.ОткрытьФайл(ИмяФайлаВыгрузки);
    МояФабрикаXDTO.ЗаписатьXML(ЗаписьXML,МоиДанные,,,,НазначениеТипаXML.Явное);
    ЗаписьXML.Закрыть();

На выходе получается кусок следующей структуры:
...
<ТЧ_ИзменениеКоллекции>
    <Строка>
        <Дата>2001-01-01T00:00:00</Дата>
        <Коллекция>НоваяКоллекция</ТретьяКоллекция>
    </Строка>
    <Строка>
        <Дата>2017-04-01T00:00:00</Дата>
        <Коллекция>Сток</ТретьяКоллекция>
        </Строка>
</ТЧ_ИзменениеКоллекции>
...

Сохраняю этот же объект в JSON
    ЗаписьJSON = Новый ЗаписьJSON;
    
    ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(,,,,Истина,Истина,Истина,Истина,Истина);
    ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписи);
    МояФабрикаXDTO.ЗаписатьJSON(ЗаписьJSON,МоиДанные,НазначениеТипаXML.Явное);
    СтрокаЗапроса = ЗаписьJSON.Закрыть();

На выходе получаю вот такую стрктуру:

"ТЧ_ИзменениеКоллекции": [
    {
        "Дата": "2001-01-01T00:00:00",
        "Коллекция": "НоваяКоллекция"
    },
    {
        "Дата": "2017-04-01T00:00:00",
        "Коллекция": "Сток"
    }
]

Легко заметить, что теряется имя тэга "Строка".

Как мне добиться, чтобы структура была такая:

"ТЧ_ИзменениеКоллекции": [
    {
        "Строка": {
            "Дата": "2001-01-01T00:00:00",
            "Коллекция": "НоваяКоллекция"
            }
    },
    {
    "Строка": {
            "Дата": "2017-04-01T00:00:00",
            "Коллекция": "Сток"
        }
    }
]
...

Т.е. чтобы не терялось имя тэга "Строка"?
   ДенисЧ
 
1 - 26.06.20 - 15:55
<Коллекция>НоваяКоллекция</ТретьяКоллекция>

Это что такое за не велформед-хмл?
   azernot
 
2 - 26.06.20 - 15:58
(1) :)
Ну это мой косяк, неверно отредактировал. Считаем, что закрывающий тэг называется так же, как и открывающий "Коллекция"
   fisher
 
3 - 26.06.20 - 15:59
Разве что пост-обработкой. Ты же понимаешь, что странно такого хотеть автоматически. Это ведь неравноценные варианты. Для указанного XML это вполне логичный JSON
   azernot
 
4 - 26.06.20 - 16:02
(3) Логичный? Тупо взял и имя тега съел?
   pechkin
 
5 - 26.06.20 - 16:05
но зачем лишний тег?
зачем нужен вложенный объект?
   pechkin
 
6 - 26.06.20 - 16:06
в xml просто нет массивов поэтому без тэга никак
   fisher
 
7 - 26.06.20 - 16:08
(4) В XML - это служебный тег, обрамляющий элемент коллекции. Эдакий костыль, потому что в XML такой путь. А в JSON другая концепция. В javascript оно и так десериализуется в массив объектов.
   Ёпрст
 
8 - 26.06.20 - 16:10
(0) если без фабрики лепить, съедает ?
   azernot
 
9 - 26.06.20 - 16:13
(8) А как без фабрики? Массивами? Руками текст?
   Ёпрст
 
10 - 26.06.20 - 16:14
(9) как обычно, или массив соответствий или массив структур
   Ёпрст
 
11 - 26.06.20 - 16:16
Ну и тест на вшивость, через фабрику. Поменяй у пары элементов на <строка1......<Строка2
   Ёпрст
 
12 - 26.06.20 - 16:16
Прилетят они в json ? видать 1с-ина не умеет, когда одинаковые элементы в массиве
   azernot
 
13 - 26.06.20 - 16:18
(11) Ты же понимаешь, что это всё генерится из пакета "XDTO", как же я там поменяю на "Строка1", "Строка2"
   Ёпрст
 
14 - 26.06.20 - 16:30
(13) ну, запиши в xml, там поменяй, потом прочитай xml и запиши в жсон
у фабрики же есть вроде метод прочитатьиксэмэл
   Ёпрст
 
15 - 26.06.20 - 16:30
для спортивного интереса
   azernot
 
16 - 26.06.20 - 16:52
(15) Мне кажется ответ очевиден.. Система вообще не воспримет это как массив и запишет всё в свои тэги.
   Ёпрст
 
17 - 26.06.20 - 23:04
(16) мне не лень, я проверил, даже с твоей структурой работает как надо :
СтрокаXML = "    
|<ТЧ_ИзменениеКоллекции>
|    <Строка>
|        <Дата>2001-01-01T00:00:00</Дата>
|        <Коллекция>
|            НоваяКоллекция
|        </Коллекция>
|    </Строка>
|    <Строка>
|        <Дата>2017-04-01T00:00:00</Дата>
|        <Коллекция>
|            Сток
|        </Коллекция>
|    </Строка>
|</ТЧ_ИзменениеКоллекции>";
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрокаXML);
МояФабрикаXDTO = Новый ФабрикаXDTO;
МоиДанные  = МояФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
    ЗаписьJSON = Новый ЗаписьJSON;
    
    ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(,,,,Истина,Истина,Истина,Истина,Истина);
    ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписи);
    МояФабрикаXDTO.ЗаписатьJSON(ЗаписьJSON,МоиДанные,НазначениеТипаXML.Явное);
    СтрокаЗапроса = ЗаписьJSON.Закрыть();
    Сообщить(СтрокаЗапроса);
   Ёпрст
 
18 - 26.06.20 - 23:05
ЗЫ: тока я поправил, как в (1)

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.