Отправка JSON с числовыми именами и именами атрибутов guid
Из BizTalk я должен отправить файл JSON, который выглядит следующим образом.
[
{
"attr": {
"b587d548-8aa6-42b7-b292-0f3e13452c35": {
"1": "-2.073420455529934786"
}
},
"guid": "80974561-a449-4a94-8b3e-970822b84406",
"anotherGuid": "05060c4c-f0af-46b8-810e-30c0c00a379e",
"lastModified": "2019-11-09T01:44:34.157Z",
"attributes":
{
"4": "2019-11-05T20:30:57.6Z",
"8": "6",
"10": "8",
"13": "7",
"27": "3",
...
},
...
}
]
В схеме BizTalk я не могу определить что-то подобное. ВGuid
в attr
и имена атрибутов числа в attributes
не исправлены и могут иметь другие значения.
У меня есть идея реализовать настраиваемый компонент конвейера, который преобразует BizTalk XML в выходной JSON. Но я понятия не имею, как решить проблему с именами атрибутов, потому что это недопустимые имена XML.
Что может быть наиболее элегантным для решения этой проблемы?
Заранее спасибо.
ОБНОВЛЕНИЕ с дополнительной информацией
Чтобы получить JSON
как выше XML
должен выглядеть недействительным
<root>
<element>
<anotherGuid>05060c4c-f0af-46b8-810e-30c0c00a379e</anotherGuid>
<attr>
<b587d548-8aa6-42b7-b292-0f3e13452c35>
<1>-2.073420455529934786</1>
</b587d548-8aa6-42b7-b292-0f3e13452c35>
</attr>
<attributes>
<10>8</10>
<13>7</13>
<27>3</27>
<4>2019-11-05T20:30:57.6Z</4>
<8>6</8>
</attributes>
<guid>80974561-a449-4a94-8b3e-970822b84406</guid>
<lastModified>2019-11-09T01:44:34.157Z</lastModified>
</element>
</root>
Чтобы получить действительный XML
Мне нужно изменить недопустимые элементы, т.е. вместо <4 />
может быть <e4 />
, <element name="4" />
или что-то вроде этого. Затем парсер (или что-то еще?) Должен отобразить этоXML
элемент к правильному JSON
один.
2 ответа
Я нашел решение этой проблемы, но не в том виде, в котором он хотел изначально.
Данные получены из хранимой процедуры. Я получаю это как XML и хотел преобразовать его в JSON из вопроса. Поскольку такой JSON не может быть создан из соответствующего XML (это было бы неправильно сформировано), я не думаю, что есть чистое решение для этой проблемы. Я оставил вопрос открытым на всякий случай, если есть хорошая возможность.
Теперь я решил это следующим образом. У меня есть хранимая процедура, которая теперь доставляет данные в формате JSON. Поскольку BizTalk работает только с XML, этот JSON включен в структуру XML. Затем я написал настраиваемый компонент конвейера, который извлекает JSON из XML и передает его из BizTalk в целевую систему. Итак, я получаю структуру JSON без сериализации из XML.
Это скорее обходной путь, но кое-что, что работает хорошо.
Создайте схему xsd, которая производит что-то вроде следующего. Что я сделал, так это поместил сложные вещи как просто значение простого элемента, напримерattr
а также attributes
элементы. Я не уверен, что JSON Encoder примет такие значения, но, думаю, стоит попробовать.
Единственным недостатком является то, что ваше преобразование будет немного сложнее, потому что вам нужно будет частично создать свой JSON. Но я чувствую, что это был бы элегантный способ решить эту проблему, поскольку вы по-прежнему максимально используете стандартные компоненты.
<element>
<anotherGuid>05060c4c-f0af-46b8-810e-30c0c00a379e</anotherGuid>
<attr>
b587d548-8aa6-42b7-b292-0f3e13452c35": {
"1": "-2.073420455529934786"
}
</attr>
<attributes>
"4": "2019-11-05T20:30:57.6Z",
"8": "6",
"10": "8",
"13": "7",
"27": "3"
</attributes>
<guid>80974561-a449-4a94-8b3e-970822b84406</guid>
<lastModified>2019-11-09T01:44:34.157Z</lastModified>
</element>