Отправка JSON с числовыми именами и именами атрибутов guid - PullRequest
0 голосов
/ 09 ноября 2019

из 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 в OutputJSON. Но я понятия не имею, как решить проблему с именами атрибутов, поскольку они не являются допустимыми именами 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 ]

0 голосов
/ 10 ноября 2019

Я нахожу решение для этой проблемы, но не в первоначально разыскиваемом виде.

Данные получены из хранимой процедуры. Это я получаю как XML и хотел преобразовать это в JSON из вопроса. Поскольку JSON, подобный этому, не может быть создан из соответствующего XML (это не будет правильно сформировано), я не думаю, что есть чистое решение для этой проблемы. Я оставил вопрос открытым на всякий случай, если бы была хорошая возможность.

Теперь я решил его следующим образом. У меня есть хранимая процедура, которая доставляет данные в формате JSON. Поскольку BizTalk работает только с XML, этот JSON включен в структуру XML. Затем я написал собственный конвейерный компонент, который извлекает JSON из XML и передает его из BizTalk в систему назначения. Таким образом, я получаю структуру JSON без сериализации из XML.

Это скорее обходной путь, но хорошо работающий.

0 голосов
/ 10 ноября 2019

Создайте схему 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>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...