JAXB对象的JSON结构是否始终符合XSD中定义的元素顺序?

时间:2018-10-22 17:21:31

标签: json xsd gson

JAXB对象的JSON字符串结构是否始终与XSD中定义的元素的顺序对齐?更明确地说,例如,如果我有如下所示的XSD

<xs:schema>
<xs:complexType name="Person">
   <xs:sequence>
      <xs:element name="header">
         <xs:complexType>
            <xs:sequence>
               <xs:element ......>
               <xs:element ......>
               ......
               .......
            </xs:sequence>
         <xs:complextType>
      </xs:element>
      <xs:element name="data">
        ..........
        ...........
      </xs:element>
      <xs:element name ="footer">
        ...........
        ...........
      </xs:elment>
      </xs:sequence>
</xs:complexType>
</xs:schema>

如您所见,我的架构定义了一个复杂的类型,称为Person,其中包含一系列元素,如Header,data,footer等其他元素。 现在,我创建一个对象,然后转换为JSON字符串。

JSON字符串是否总是返回

{"header":{},"data":{},"footer":{}}

否则顺序可能会改变?

我以不同的方式通过创建一个Person对象进行了测试,但是在所有情况下,我都看到了上述结构。但我不想根据此测试得出结论。

是否有任何规范可以确认JSON元素顺序将与XSD元素顺序对齐或不对齐?

整个原因是,我有一个问题要解决,在这种情况下,我需要从上到下处理非常大(可能是几GB)的JSON有效负载作为流。我不想将整个对象加载到内存中进行处理。如果JSON中元素的顺序是可预测的,那么我可以以此为基础构建逻辑。如果这种顺序不可预测,那么我必须重新考虑如何处理如此巨大的有效载荷。

我当前的实现方式是

reader = new JsonReader(new InputStreamReader(payloaD));
reader.beginObject();
    while(reader.hasNext()){
        String tokenName = reader.nextName();
        if("HEADER".equals(tokenName))
            //dosomething
        else if("DATA".equals(tokenName))
            //do something
        else
           //do something
     }
reader.endObject();

我的实现假设如果先出现标头,然后是数据和页脚,我将处理JSON。

谢谢

0 个答案:

没有答案