staxon实现json和xml互转

Posted Nihaorz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了staxon实现json和xml互转相关的知识,希望对你有一定的参考价值。

pom.xml:

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

转换工具类:

package com.nihaorz.utils;

import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;

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

import de.odysseus.staxon.json.JsonXMLConfig;
import de.odysseus.staxon.json.JsonXMLConfigBuilder;
import de.odysseus.staxon.json.JsonXMLInputFactory;
import de.odysseus.staxon.json.JsonXMLOutputFactory;
import de.odysseus.staxon.xml.util.PrettyXMLEventWriter;

public class StaxonUtils {
	/**
	 * json string convert to xml string
	 */
	public static String json2xml(String json) {
		StringReader input = new StringReader(json);
		StringWriter output = new StringWriter();
		JsonXMLConfig config = new JsonXMLConfigBuilder().multiplePI(false)
				.repairingNamespaces(false).build();
		try {
			XMLEventReader reader = new JsonXMLInputFactory(config)
					.createXMLEventReader(input);
			XMLEventWriter writer = XMLOutputFactory.newInstance()
					.createXMLEventWriter(output);
			writer = new PrettyXMLEventWriter(writer);
			writer.add(reader);
			reader.close();
			writer.close();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				output.close();
				input.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		if (output.toString().length() >= 38) {
			// remove <?xml version="1.0" encoding="UTF-8"?>
			return output.toString().substring(39);
		}
		return output.toString();
	}

	/**
	 * xml string convert to json string
	 */
	public static String xml2json(String xml) {
		StringReader input = new StringReader(xml);
		StringWriter output = new StringWriter();
		JsonXMLConfig config = new JsonXMLConfigBuilder().autoArray(true)
				.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();
	}
}

测试代码:

package com.nihaorz.xmltojson;

import org.junit.Test;

import com.nihaorz.utils.StaxonUtils;

public class UtilsTest {
	
	@Test
	public void test_xmltojson(){
		String xml = "<goods><name type=\"book\" prices=\"100\">钢铁是怎样炼成的</name><name1 type=‘book‘ prices=‘100‘>钢铁是怎样炼成的</name1><name type=‘book‘ prices=‘100‘>钢铁是怎样炼成的</name></goods>";
		System.out.println(xml);
		String json = StaxonUtils.xml2json(xml);  
        System.out.println(json);
	}
	
	@Test
	public void test_jsontoxml(){
		String json = "{\"goods\":{\"name\":{\"@prices\":100,\"@type\":\"book\",\"$\":\"钢铁是怎样炼成的\"},\"name1\":{\"@prices\":\"100\",\"@type\":\"book\",\"$\":\"钢铁是怎样炼成的\"},\"name\":{\"@prices\":\"100\",\"@type\":\"book\",\"$\":\"钢铁是怎样炼成的\"}}}";
		System.out.println(json);
		String xml = StaxonUtils.json2xml(json);
		System.out.println(xml);
	}
	
	
}

  

 

以上是关于staxon实现json和xml互转的主要内容,如果未能解决你的问题,请参考以下文章

用python怎么实现json和xml的互转

工具类|java实现Json和XML相互转换

C# Json 和 Xml的互转

springboot XStream进行Bean和xml互转

JsonJavaBeanMapXML之间的互转

JSONUtil(JAVA对象/List与json互转,xml与json互转)