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

staxon完美实现Xml与Json互转

发布时间:2020-12-16 09:04:26 所属栏目:百科 来源:网络整理
导读:Maven包依赖: !-- for staxon --dependencygroupIdde.odysseus.staxon/groupIdartifactIdstaxon/artifactIdversion1.2/version/dependency 实现代码: package cn.yangyong.fodder.util;import java.io.IOException;import java.io.StringReader;import jav

Maven包依赖:

        <!-- for staxon -->
	<dependency>
		<groupId>de.odysseus.staxon</groupId>
		<artifactId>staxon</artifactId>
		<version>1.2</version>
	</dependency>
实现代码:
package cn.yangyong.fodder.util;

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;

/**
 * json and xml converter
 * @author magic_yy
 * @see https://github.com/beckchr/staxon
 * @see https://github.com/beckchr/staxon/wiki
 *
 */
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 cn.yangyong.fodder.util;

import org.junit.Test;

public class StaxonUtilsTest {
	
	@Test
	public void test_json2xml(){
		String json = "{"Response" : {"CustID" : 1300000428,"CompID" : 1100000324,"Items" : {"Item" : [ {"Sku_ProductNo" : "sku_0004","Wms_Code" : 1700386977,"Sku_Response" : "T","Sku_Reason" : null},{"Sku_ProductNo" : "0005","Wms_Code" : 1700386978,"Sku_Reason" : null}]}}}";
		String xml = StaxonUtils.json2xml(json);
		System.out.println(xml);
	}
	
	@Test
	public void test_xml2json(){
		String xml = "<Response><CustID>1300000428</CustID><CompID>1100000324</CompID><Items><Item><Sku_ProductNo>sku_0004</Sku_ProductNo><Wms_Code>1700386977</Wms_Code><Sku_Response>T</Sku_Response><Sku_Reason></Sku_Reason></Item><Item><Sku_ProductNo>0005</Sku_ProductNo><Wms_Code>1700386978</Wms_Code><Sku_Response>T</Sku_Response><Sku_Reason></Sku_Reason></Item></Items></Response>";
		String json = StaxonUtils.xml2json(xml);
		System.out.println(json);
	}
}

转载地址:

json、javaBean、xml互转的几种工具介绍

http://blog.csdn.net/sdyy321/article/details/7024236/

绝对是一篇好文,笔者不仅给出来解决方案,还比较了几种方法的优劣,此谓授之以渔。

(编辑:李大同)

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

    推荐文章
      热点阅读