![]() |
|
Сохранение объекта XDTO в json | ☑ | ||
---|---|---|---|---|
0
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
|
<Коллекция>НоваяКоллекция</ТретьяКоллекция>
Это что такое за не велформед-хмл? |
|||
2
azernot
26.06.20
✎
15:58
|
(1) :)
Ну это мой косяк, неверно отредактировал. Считаем, что закрывающий тэг называется так же, как и открывающий "Коллекция" |
|||
3
fisher
26.06.20
✎
15:59
|
Разве что пост-обработкой. Ты же понимаешь, что странно такого хотеть автоматически. Это ведь неравноценные варианты. Для указанного XML это вполне логичный JSON
|
|||
4
azernot
26.06.20
✎
16:02
|
(3) Логичный? Тупо взял и имя тега съел?
|
|||
5
pechkin
26.06.20
✎
16:05
|
но зачем лишний тег?
зачем нужен вложенный объект? |
|||
6
pechkin
26.06.20
✎
16:06
|
в xml просто нет массивов поэтому без тэга никак
|
|||
7
fisher
26.06.20
✎
16:08
|
(4) В XML - это служебный тег, обрамляющий элемент коллекции. Эдакий костыль, потому что в XML такой путь. А в JSON другая концепция. В javascript оно и так десериализуется в массив объектов.
|
|||
8
Ёпрст
гуру
26.06.20
✎
16:10
|
(0) если без фабрики лепить, съедает ?
|
|||
9
azernot
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с-ина не умеет, когда одинаковые элементы в массиве
|
|||
13
azernot
26.06.20
✎
16:18
|
(11) Ты же понимаешь, что это всё генерится из пакета "XDTO", как же я там поменяю на "Строка1", "Строка2"
|
|||
14
Ёпрст
гуру
26.06.20
✎
16:30
|
(13) ну, запиши в xml, там поменяй, потом прочитай xml и запиши в жсон
у фабрики же есть вроде метод прочитатьиксэмэл |
|||
15
Ёпрст
гуру
26.06.20
✎
16:30
|
для спортивного интереса
|
|||
16
azernot
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)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |