本节重点在于使用staxon实现xml和json直接互转,主流的转换工具还有json-lib、jackson、fastjson,实现json、javabean和xml互转。简单对比各种转换工具:
(1)首先是json-lib,很早的转换工具,缺点多,依赖第三方多,效率低下,不建议使用;
需要的依赖:json-lib、xom和xalan,可在/ 分别搜索进行下载(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导入依赖:
// /artifact//staxon
compile group: '', name: 'staxon', version: '1.3'
或maven 导入依赖:
<!-- /artifact//staxon -->
<dependency>
<groupId></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 = ().createXMLEventReader(input);
XMLEventWriter writer = new JsonXMLOutputFactory(config).createXMLEventWriter(output);
(reader);
();
();
} catch (Exception e) {
();
} finally {
try {
();
();
} catch (IOException e) {
();
}
}
return ();
}
/**
* @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 = ().createXMLEventWriter(output);
writer = new PrettyXMLEventWriter(writer);
(reader);
();
();
}catch (Exception e) {
();
} finally {
try {
();
();
} catch (IOException e) {
();
}
}
// remove <?xml version="1.0" encoding="UTF-8"?>
if (().length() >= 38) {
return ().substring(39);
}
return ();
}
/**
* @Description: 去掉xml中的换行和空格
* @author wangyan_z
* @date 2019年7月11日 下午4:05:40
*/
public static String JsonToXmlReplaceBlank(String jsonString) {
String str = (jsonString);
String dest = "";
if (str != null) {
Pattern p = ("\\s*|\t|\r|\n");
Matcher m = (str);
dest = ("");
}
return dest;
}
}
3、测试结果:
用 swagger,即http://localhost:8080/ 来测试后端接口,结果为:
//测试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!!!