|
Как ПрочитатьJSON если порядок измерений, реквизитов отличается ? | ☑ | ||
---|---|---|---|---|
0
ИС-2
naïve
05.09.22
✎
08:26
|
Есть 2 базы, в которых регистры совпадали 1 в 1. Был реализован обмен через JSON.
Выгрузка шла через выгрузку набора записей и метод СериализаторXDTO.ЗаписатьJSON(ЗаписьJSON,СсылкаВыгрузки,НазначениеТипаXML.Явное); и чтение через ПрочитатьJson в базе приемнике. В один момент порядок измерений изменился и загрузка перестала работать с ошибкой: Ошибка преобразования данных XDTO: Попытка поправить через функцию восстановления - не помогла. В нее даже не заходит. Сразу уходит в ошибку Переделывать на ТЗ обмен - долго. Обрабатывать текст JSON для синхронизации порядка - будет тормозить. Есть ли возможность сделать так, чтобы при загрузке шло простое сопоставление по свойствам ? |
|||
1
alarm2020
05.09.22
✎
08:49
|
(0) Переделывать обмен может в результате оказаться самым быстрым способом
|
|||
2
mikecool
05.09.22
✎
08:55
|
(0) запрос и выборка в нужном порядке
|
|||
3
ptiz
05.09.22
✎
12:57
|
(0) В одной из баз всё-таки сдвинуть измерения в нужном порядке.
|
|||
4
Kassern
05.09.22
✎
13:03
|
(0) все же посмотрите в сторону ПрочитатьJSON()
|
|||
5
Kassern
05.09.22
✎
13:08
|
(4) я имею в виду про глобальный метод
|
|||
6
СеменовСемен
05.09.22
✎
13:37
|
но зачем 1с требует порядка реквизитов? Зачем тогда имена выгружает?
Архитектора данной фичи - на кол |
|||
7
Hmster
05.09.22
✎
14:57
|
(5) так у него в JSON явно тип указан, и при чтении пытается объект создать, а он другой
|
|||
8
Kassern
05.09.22
✎
15:00
|
(7) ручками сам создаст, если нет возможности структуру идентичной сделать
|
|||
9
Fragster
гуру
05.09.22
✎
15:19
|
(6) наследие пакетов xdto.
В случае с xml пропускал через xslt, добавляя, переставляя и удаляя реквизиты и атрибуты (например добавляя тип, если вдруг стал составной). в случае с json, наверное, быстрее пропустить через regexp, убирающий тип, чтобы получить структуру или объект XDTO вместо объекта базы, и потом заполнитьЗначениеСвойств. Только надо с ТЧ что-то решить. Ну или так же регэкспом переставить реквизиты. |
|||
10
Hmster
05.09.22
✎
16:42
|
Или можно попробовать изменить чтение на последовательное: ЧтениеJSON.Прочитать()
Но для меня это сомнительное удовольствие. Если есть возможность при записи файла записывать в структуру с массивом - то быстрее будет так. |
|||
11
СеменовСемен
05.09.22
✎
17:04
|
(9) как будто в хдто не было имен реквизитов. какой то студент делай, а второй студент пропустил эту поделку на продакшн
|
|||
12
Chai Nic
05.09.22
✎
17:28
|
Надо было не выеживаться и сериализовать через ЗначениеВСтрокуВнутр()
|
|||
13
СеменовСемен
05.09.22
✎
17:44
|
(12) а что оно умеет читать, если реквизиты поменялись?
|
|||
14
Fragster
гуру
05.09.22
✎
17:59
|
(11) поделка это то, что ты делаешь
|
|||
15
kittystark
05.09.22
✎
17:59
|
(0) я сам недавно в такой ситуации выкрутился через регулярные выражения, примерно так:
- смотришь на структуру JSON старую - смотришь на структур JSON новую - глазками находишь 20 различий - программно через regExp.Replace() ОДНОЙ СТРОЧКОЙ на лету меняешь старую под новую (типа как СтрЗаменить, но только с более крутыми шаблонами поиска и замены) |
|||
16
Chai Nic
05.09.22
✎
21:18
|
(13) Выгружаешь набор записей в ТЗ, её сериализуешь в строку или в файл "Внутр", передаешь в другую базу, десериализуешь, загружаешь ТЗ в НЗ регистра.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |