Всегда ли структура JSON объекта JAXB совпадает с порядком элементов, определенным в XSD? - PullRequest
0 голосов
/ 22 октября 2018

Всегда ли строковая структура 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, если заголовок идет первым, затем данные и нижний колонтитул.

Спасибо

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