Java实现xml、json和javaBean互转

2 篇文章 0 订阅
1 篇文章 0 订阅

        

          本节重点在于使用staxon实现xml和json直接互转,主流的转换工具还有json-lib、jackson、fastjson,实现json、javabean和xml互转。简单对比各种转换工具:

 

      (1)首先是json-lib,很早的转换工具,缺点多,依赖第三方多,效率低下,不建议使用;

              需要的依赖:json-lib、xom和xalan,可在https://mvnrepository.com/ 分别搜索进行下载(maven或gradle)。

      (2)其次是jackson,因为json-lib的缺点,便有了jackson,它比json-lib的转换效率高,依赖少;

              需要的依赖:jackson-databind和jackson-dataformat-xml,同样可搜索下载;另外基于jackson的工具有很多,可按照自己的实际需求下载对应依赖,下载方法如上。

       (3)最后是fastjson,jackson一直很主流,社区和文档支持很充足,但不够快,不够简洁,于是fastjson应运而生,在功能和支持方面虽不能和jackson媲美,但天下武功,唯快不破,这就决定了fastjson有了一定的市场。

              需要的依赖:fastjson,除了自身零依赖。

 

 

接下来开始本节重点,staxon主要用来实现json和xml直接互转,下面是实现代码(仅作为工具使用,并未深究):

 

1、首先,gradle导入依赖:

	// https://mvnrepository.com/artifact/de.odysseus.staxon/staxon
	compile group: 'de.odysseus.staxon', name: 'staxon', version: '1.3'

     或maven 导入依赖:

<!-- https://mvnrepository.com/artifact/de.odysseus.staxon/staxon -->
<dependency>
    <groupId>de.odysseus.staxon</groupId>
    <artifactId>staxon</artifactId>
    <version>1.3</version>
</dependency>

 

2、xml转json方法 和 json转xml方法:

public class DataFormatUtil {
    /**
     * @Description: xml convert to json
     * @author wangyan_z
     * @date 2019年7月10日 上午10:50:32
     */
    public static String XmlToJson(String xmlString){

        StringReader input = new StringReader(xmlString);
        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();
    }

    /**
     * @Description: json convert to xml
     * @author wangyan_z
     * @date 2019年7月10日 上午10:52:32
     */
    public static String JsonToXml(String jsonString){
        StringReader input = new StringReader(jsonString);
        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();
            }
        }
        // remove <?xml version="1.0" encoding="UTF-8"?>
        if (output.toString().length() >= 38) {
            return output.toString().substring(39);
        }
        return output.toString();
    }
    /**
     * @Description: 去掉xml中的换行和空格
     * @author wangyan_z
     * @date 2019年7月11日 下午4:05:40
     */
    public static String JsonToXmlReplaceBlank(String jsonString) {
        String str = DataFormatUtil.JsonToXml(jsonString);
        String dest = "";
        if (str != null) {
            Pattern p = Pattern.compile("\\s*|\t|\r|\n");
            Matcher m = p.matcher(str);
            dest = m.replaceAll("");
        }
        return dest;
    }
}

 

3、测试结果:

      用 swagger,即http://localhost:8080/swagger-ui.html 来测试后端接口,结果为:

//测试xml
<root>
<head>
<OrgNum>0000101</OrgNum>
<TermiId></TermiId>
</head>
<body>
<cust_id>QY201600006082</cust_id>
<cust_no>9542108405</cust_no>
<loan_mortgages></loan_mortgages>
</body>
</root>
//生成json,同时是测试json
{
	"root" : {
		"head" : {
			"OrgNum" : "0000101",
			"TermiId" : null
		},
		"body" : {
			"cust_id" : "QY201600006082",
			"cust_no" : 9542108405,
			"loan_mortgages" : null
		}
	}
}
//生成xml
<root>
	<head>
		<OrgNum>0000101</OrgNum>
		<TermiId></TermiId>
	</head>
	<body>
		<cust_id>QY201600006082</cust_id>
		<cust_no>9542108405</cust_no>
		<loan_mortgages></loan_mortgages>
	</body>
</root>

 

        over!!!

 

 

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值