Java8 - 将非常大的 XML 输入转换为 JSON(具有额外属性)
Java8 - Convert a very large XML input into JSON (with an extra attribute)
我想把一个巨大的XML变成JSON。每次识别特定的 XML 标签时,我想将标签的 XML 部分转换为 JSON AND 我想向其添加一个简单的计数器。
重要的是输入 XML 非常大,因此无法将其放入内存 JSON 树中。
所以 ... <xml><car>...</car><car>...</car>...
转换为
{"number":2,"car":{"name":"car1"}}
{"number":3,"car":{"name":"car2"}}
感谢 Andreas,我终于找到了处理巨大 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"}}
我想把一个巨大的XML变成JSON。每次识别特定的 XML 标签时,我想将标签的 XML 部分转换为 JSON AND 我想向其添加一个简单的计数器。
重要的是输入 XML 非常大,因此无法将其放入内存 JSON 树中。
所以 ... <xml><car>...</car><car>...</car>...
转换为
{"number":2,"car":{"name":"car1"}}
{"number":3,"car":{"name":"car2"}}
感谢 Andreas,我终于找到了处理巨大 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"}}