Отправка 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>

Другие вопросы по тегам