0

从 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 架构中,我无法定义这样的内容。Guidin和attrnumber 属性名称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

4

2 回答 2

0

我找到了解决这个问题的方法,但不是最初想要的那种。

数据是从存储过程中接收的。这是我作为 XML 得到的,并想从问题中将其转换为 JSON。因为无法从相应的 XML 创建像这样的 JSON(这将不是格式正确的),所以我认为这些问题没有一个干净的解决方案。我让这个问题打开,以防万一有很好的可能性。

现在我通过以下方式解决了它。我有一个存储过程,它现在将数据作为 JSON 提供。因为 BizTalk 仅适用于 XML,所以此 JSON 包含在 XML 结构中。然后我编写了一个自定义管道组件,它从 XML 中提取 JSON 并将其从 BizTalk 传输到目标系统。因此,我无需从 XML 序列化即可获得 JSON 结构。

这更像是一种解决方法,但效果很好。

于 2019-11-10T17:14:46.197 回答
0

Create an xsd schema that produces something like the following. What i did was put the complex stuff as just the value of a simple element, like the attr and attributes elements. I'm not sure if the JSON Encoder will accept values like this, but i guess it's worth a shot.

The only downside is that your transform will be a little more complex because you will need to produce your JSON partly. But i'm feeling this would be a elegant way to solve it, as you're still making the most out of the stock components.

<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>

于 2019-11-10T14:40:32.620 回答