加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML转换成json

发布时间:2020-12-16 08:51:00 所属栏目:百科 来源:网络整理
导读:方式一: import java.io.BufferedReader;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import net.sf.json.JSON;import net.sf.json.xml.XMLSerializer;public class XMLToJson {public static void main(

方式一:

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

import net.sf.json.JSON;
import net.sf.json.xml.XMLSerializer;

public class XMLToJson {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		String xml = readXML();
		System.out.println(xml);
		XMLSerializer xmlSerializer = new XMLSerializer();
		//deal with the special field "type"
		xmlSerializer.setTypeHintsCompatibility(false);
		xmlSerializer.setTypeHintsEnabled(false);
//		xmlSerializer.setSkipNamespaces(true);
//		xmlSerializer.setSkipWhitespace(true);
		JSON json = xmlSerializer.read(xml);
		System.out.println(json.toString());
//		JsonAnalysis josnAnalysis = new JsonAnalysis(json.toString());
//		josnAnalysis.retrieveJson();
	}

	// read xml file
	private static String readXML() throws IOException {
		String path = "C:UsershitlerDesktopdatatypebioproject_result.xml";
		FileInputStream fileInputStream = new FileInputStream(path);
		BufferedReader reader = new BufferedReader(new InputStreamReader(
				fileInputStream));
		String xml = "";
		String line;
		while ((line = reader.readLine()) != null) {
			xml = xml + line;
		}
		reader.close();
		return xml;
	}
}

使用net.sf.json.xml.XMLSerializer解析的时候,会出现以下几个问题:

(1)当元素的属性中有"type"的时候,XMLSerializer默认是不解析的,如果想要程序对这个属性进行解析的话,需要添加以下代码:

		xmlSerializer.setTypeHintsCompatibility(false);
		xmlSerializer.setTypeHintsEnabled(false);


(2)当元素节点没有属性的时候,XMLSerilizer就不会对其进行解析,具体解决办法参照【方式二】


方式二:

采用github上面的一个解析工具进行解析;

MavenDependency:

    <dependency>
        <groupId>de.odysseus.staxon</groupId>
        <artifactId>staxon</artifactId>
        <version>1.3</version>
    </dependency>

    <!-- or,to use the Jackson streaming backend -->
    <dependency>
        <groupId>de.odysseus.staxon</groupId>
        <artifactId>staxon-jackson</artifactId>
        <version>1.3</version>
    </dependency>

具体应用代码:

示例一:

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stax.StAXResult;
import javax.xml.transform.stax.StAXSource;

import de.odysseus.staxon.json.JsonXMLConfig;
import de.odysseus.staxon.json.JsonXMLConfigBuilder;
import de.odysseus.staxon.json.JsonXMLOutputFactory;

public class XmlToJsonStaxon {
	/**
	 * Copy/format XML as JSON using
	 * {@link Transformer#transform(Source,Result)}.
	 * 
	 * @param args
	 *            ignored
	 * @throws TransformerException
	 * @throws XMLStreamException
	 */
	public static void main(String[] args) throws TransformerException,XMLStreamException,IOException {
		InputStream input = XmlToJsonStaxon.class
				.getResourceAsStream("input.xml");
		OutputStream output = System.out;
		/*
		 * If we want to insert JSON array boundaries for multiple elements,we
		 * need to set the <code>autoArray</code> property. If our XML source
		 * was decorated with <code><?xml-multiple?></code> processing
		 * instructions,we'd set the <code>multiplePI</code> property instead.
		 * With the <code>autoPrimitive</code> property set,element text gets
		 * automatically converted to JSON primitives (number,boolean,null).
		 */
		JsonXMLConfig config = new JsonXMLConfigBuilder().autoArray(false)
				.autoPrimitive(true).prettyPrint(true).build();
		try {
			/*
			 * Create source (XML).
			 */
			XMLStreamReader reader = XMLInputFactory.newInstance()
					.createXMLStreamReader(input);
			Source source = new StAXSource(reader);

			/*
			 * Create result (JSON).
			 */
			XMLStreamWriter writer = new JsonXMLOutputFactory(config)
					.createXMLStreamWriter(output);
			Result result = new StAXResult(writer);

			/*
			 * Copy source to result via "identity transform".
			 */
			TransformerFactory.newInstance().newTransformer()
					.transform(source,result);

			System.out.println();
			/*
			 * JsonAnalysis josnAnalysis = new JsonAnalysis((JSON) System.out);
			 * josnAnalysis.retrieveJson();
			 */
		} finally {
			/*
			 * As per StAX specification,XMLStreamReader/Writer.close() doesn't
			 * close the underlying stream.
			 */
			output.close();
			input.close();
		}
	}
}
示例二:
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.io.StringWriter;

import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLInputFactory;

import de.odysseus.staxon.json.JsonXMLConfig;
import de.odysseus.staxon.json.JsonXMLConfigBuilder;
import de.odysseus.staxon.json.JsonXMLOutputFactory;

public class StaxonUtils {

	public static void main(String[] args) throws IOException {
		String xml = readXML();
		String json = xml2json(xml);
		System.out.println(json);
		JsonAnalysis josnAnalysis = new JsonAnalysis(json);
		josnAnalysis.retrieveJson();
	}

	// read xml file
	private static String readXML() throws IOException {
		String path = "C:UsershitlerDesktopdatatypebioproject_result_neww.xml";
		FileInputStream fileInputStream = new FileInputStream(path);
		BufferedReader reader = new BufferedReader(new InputStreamReader(
				fileInputStream));
		String xml = "";
		String line;
		while ((line = reader.readLine()) != null) {
			xml = xml + line;
		}
		reader.close();
		return xml;
	}

	// convert xml to json
	public static String xml2json(String xml) {
		StringReader input = new StringReader(xml);
		StringWriter output = new StringWriter();
		JsonXMLConfig config = new JsonXMLConfigBuilder().autoArray(false)
				.autoPrimitive(true).prettyPrint(true).build();
		try {
			XMLEventReader reader = XMLInputFactory.newInstance()
					.createXMLEventReader(input);
			XMLEventWriter writer = new JsonXMLOutputFactory(config)
					.createXMLEventWriter(output);
			writer.add(reader);
			reader.close();
			writer.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				output.close();
				input.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return output.toString();
	}

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读