Всегда ли строковая структура JSON объекта JAXB всегда совпадает с порядком элементов, определенных в 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, или не выравнивается?
Причина в том, что у меня есть этот вопрос, для сценария, в котором ямне необходимо обрабатывать очень большую (возможную пару ГБ) полезную нагрузку 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, если заголовок идет первым, затем данные и нижний колонтитул.
Спасибо