【问题标题】:how to convert Json array to XSD如何将 Json 数组转换为 XSD
【发布时间】:2016-12-29 10:02:45
【问题描述】:

我目前正在映射 Json 和 XSD。 在 Json 中有一个数组包含多个具有相同元素的项目。

Json 数组是这样的:

"Item":[  
   {  
      "ItemSequenceNo":0,
      "AQuantity":{  
         "code":"aaa",
         "quantity":1
      },
      "DQuantity":{  
         "code":"ddd",
         "quantity":4
      },
      "Amount":{  
         "currencyID":"USD",
         "value":111
      },

   },
   {  
      "ItemSequenceNo":1,
      "AQuantity":{  
         "code":"aaa",
         "quantity":4
      },
      "DQuantity":{  
         "code":"ddd",
         "quantity":9
      },
      "Amount":{  
         "currencyID":"USD",
         "value":123
      },
   }
]

我试图用 XSD 映射这个 Json 数组:

<xs:element name="Item">
    <xs:complexType>
        <xs:sequence minOccurs="1" maxOccurs="50">
            <xs:element ref="p:ItemSequenceNo" minOccurs="1" maxOccurs="1"/>
            <xs:element ref="p:AQuantity" minOccurs="1" maxOccurs="1"/>
            <xs:element ref="p:DQuantity" minOccurs="1" maxOccurs="1"/>
            <xs:element ref="p:Amount" minOccurs="1" maxOccurs="1"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

ref 所在的位置:

<xs:element name="ItemSequenceNo">
    <xs:simpleType>
        <xs:restriction base="xs:integer">
            <xs:totalDigits value="5"/>
        </xs:restriction>
    </xs:simpleType>
</xs:element>
<xs:element name="AQuantity">
    <xs:complexType>
        <xs:simpleContent>
            <xs:extension base="xs:integer">
                <xs:attribute name="code">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:minLength value="0"/>
                            <xs:maxLength value="3"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:attribute>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:element>
<xs:element name="DQuantity">
    <xs:complexType>
        <xs:simpleContent>
            <xs:extension base="xs:integer">
                <xs:attribute name="code">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:minLength value="0"/>
                            <xs:maxLength value="3"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:attribute>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:element>
<xs:element name="Amount">
    <xs:complexType>
        <xs:simpleContent>
            <xs:extension base="xs:integer">
                <xs:attribute name="CurrencyID">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:minLength value="0"/>
                            <xs:maxLength value="3"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:attribute>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
</xs:element>

问题是当我用 XSD 映射 Json 数组时,输出 XML 按数组项(元素)排序,如下所示:

<item>
    <ItemSequenceNo >0</ItemSequenceNo>
    <ItemSequenceNo >1</ItemSequenceNo>
    <AQuantity code="aaa">1</AQuantity>
    <AQuantity code="aaa">4</AQuantity>
    <DQuantity code="ddd">4</DQuantity>
    <DQuantity code="ddd">9</DQuantity>
    <Amount CurrencyID="USD">111</Amount>
    <Amount CurrencyID="USD">123</Amount>
</item>

虽然我期望的结果是两个单独的块:

<item>
    <ItemSequenceNo >0</ItemSequenceNo> 
    <AQuantity code="aaa">1</AQuantity> 
    <DQuantity code="ddd">4</DQuantity> 
    <Amount CurrencyID="USD">111</Amount>
</item>

<item>
    <ItemSequenceNo >1</ItemSequenceNo>
    <AQuantity code="aaa">4</AQuantity>
    <DQuantity code="ddd">9</DQuantity>
    <Amount CurrencyID="USD">123</Amount>
</item>

有没有人知道我怎样才能得到这个?通过修改Json/XSD,或者MapForce中有什么函数可以实现这个?

【问题讨论】:

  • 谢谢大家。问题解决了。原来在 MapForce 中,可以识别数组并生成我想要的输出。

标签: json xml xsd altova map-force


【解决方案1】:

正如您在评论中所说,您已经解决了它,但是对于遇到同样问题的人来说,寻找解决方案,在这里提供答案会很高兴。

这可能有点违反直觉,在 MapForce 中,您不会从 JSON 输入中的 Item-Array 到 XML 输出中的 Item 节点画线。如果这样做,您将获得 BOSubuntu 描述的统一输出。相反,您从数组包含的对象中画线(见下图,用红色标记的线)。这将提供所需的输出。

【讨论】:

    猜你喜欢
    • 2015-11-27
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 2013-05-03
    • 2021-09-15
    • 1970-01-01
    相关资源
    最近更新 更多