Java8 - преобразование очень большого XML-ввода в JSON (с дополнительным атрибутом) - PullRequest
1 голос
/ 26 апреля 2019

Я хотел бы преобразовать огромный XML в JSON. Каждый раз, когда распознается определенный XML-тег, я хотел бы преобразовать XML-часть тега в JSON AND . Я хотел бы добавить к нему простой счетчик.

Важно, что входной XML очень большой, поэтому поместить его в JSON-дерево memomry невозможно.

SO ... <xml><car>...</car><car>...</car>...

конвертируется в

{"number":2,"car":{"name":"car1"}}
{"number":3,"car":{"name":"car2"}}

1 Ответ

1 голос
/ 27 апреля 2019

Благодаря Андреасу я наконец нашел решение для обработки огромного XML-файла и преобразования xml-элементов соответствий в JSON.

String testCars = "<root><car><name>car1</name></car><other><something>Unknown</something></other><car><name>car2</name></car></root>";
String startElement = "car";
int volgnummer = 1;
XMLInputFactory factory = XMLInputFactory.newInstance();
try {
    XMLStreamReader streamReader = factory.createXMLStreamReader(new StringReader(testCars));
    streamReader.nextTag();
    TransformerFactory tf = TransformerFactory.newInstance();
    Transformer t = tf.newTransformer();
    t.setOutputProperty("omit-xml-declaration", "yes");
    streamReader.nextTag();
    while ( streamReader.isStartElement() ||
          ( ! streamReader.hasNext() && 
            streamReader.nextTag() == XMLStreamConstants.START_ELEMENT)) {
        StringWriter writer = new StringWriter();
        StreamResult result = new StreamResult(writer);
        t.transform(new StAXSource(streamReader), result);
        JSONObject jsonObject = XML.toJSONObject(writer.toString());
        jsonObject.put("sequence", ++volgnummer);
        System.out.println("XmlChunkToJson: " + jsonObject.toString());
    }
} catch (Exception e) {
    e.printStackTrace();
}

Ввод XML:

<?xml version="1.0"?>
<root>
  <car>
    <name>car1</name>
  </car>
  <other>
    <something>Unknown</something>
  </other>
  <car>
    <name>car2</name>
  </car>
</root>

Вывод JSON:

XmlChunkToJson: {"sequence":2,"car":{"name":"car1"}}
XmlChunkToJson: {"sequence":3,"other":{"something":"Unknown"}}
XmlChunkToJson: {"sequence":4,"car":{"name":"car2"}}
...