XML到JSON的动态转换

PNS*_*PNS 5 java xml json

有没有办法(使用Java代码示例,如果可能的话)在不知道实际内容和XML源结构(文件,字符串等)的情况下即时转换XML输入JSON

例如,假设一个具有未知结构和多个嵌套级别的非常大的XML数据集,存储到一个大文本文件中.一切都读入内存是不可能的(由于篇幅),他们希望这一转换成JSON直接的,即,而无需编写任何代码来检测和处理StAX的标签(例如,START_ELEMENT,CHARACTERS,END_ELEMENT).

理想的解决办法是让一个ReaderInputStream从转换器,这样,例如,一个供应XML文件和Reader或者InputStream产生JSON,被输送到一个FileOutputStream,甚至直接到JSON像解析器Jackson.如果这是不可能的,至少一种逐步读取XML文件,转换为JSON并写入另一个文件的方法将是可接受的折衷方案.

可用于从/向XML/JSON转换的工具(例如,StaxON,JSON-lib,Jettison,XStream)似乎不会这样做,而只是转换已知结构.

编辑:获取一个ReaderInputStream来自OutputStream或Writer(也可以涵盖我上面谈到的"转换"),可以通过多种方式完成,但为了获得最佳结果和"无限"输入大小,需要涉及多线程.本文在Ostermiller.org中描述了解决方案,类似的实现可以在IO-Tools库中找到.

Rya*_*art 5

这是一个简单的例子,使用Java的内置StAX实现来解析XML和Jettison以从中生成JSON.该XMLEventWriter的有一个方便的add(XMLEventWriter)桥接读者一个作家,使这个超级简单的方法:

import org.codehaus.jettison.mapped.MappedXMLOutputFactory;

import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLInputFactory;
import java.io.StringReader;
import java.util.HashMap;

public class Main {
    public static void main(String[] args) throws Exception {
        String xml =
            "<root><foo>foo string</foo><bar><x>1</x><y>5</y></bar></root>";
        XMLEventReader reader = XMLInputFactory.newInstance()
            .createXMLEventReader(new StringReader(xml));
        XMLEventWriter writer = new MappedXMLOutputFactory(new HashMap())
            .createXMLEventWriter(System.out);
        writer.add(reader);
        writer.close();
        reader.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经在Github上创建了一个独立的Maven项目.