这阵子一直在做一个三方支付,数据传递用的都是xml 但是在项目里都是用的json,没办法 研究了下json和xml互转的方法 这里做下记录。
1. json转xml 相对简单些 用递归即可实现
/**
* Map or JSON 转换成Xml
*
* fastJSON实现了Map<String,Object> 所以此处直接传json 也可以的
*/
public static String mapToXMLTest2(Map map, StringBuffer sb) {
Set set = map.keySet();
for (Iterator it = set.iterator(); it.hasNext(); ) {
String key = (String) it.next();
Object value = map.get(key);
if (null == value)
value = "";
if (value.getClass().getName().equals("java.util.ArrayList")) {
LinkedList list = (LinkedList) map.get(key);
sb.append("<" + key + ">");
for (int i = 0; i < list.size(); i++) {
HashMap hm = (HashMap) list.get(i);
mapToXMLTest2(hm, sb);
}
sb.append("</" + key + ">");
} else {
if (value instanceof HashMap) {
sb.append("<" + key + ">");
mapToXMLTest2((HashMap) value, sb);
sb.append("</" + key + ">");
} else {
sb.append("<" + key + ">" + value + "</" + key + ">");
}
}
}
return sb.toString();
}
2. xml字符串 转JSON
xml转JON 需要借助 jackSon的 fastxml包来实现
<!-- fasterxml -->
<dependency>
<groupId>com.fasterxml</groupId>
<artifactId>jackson-xml-databind</artifactId>
<version>0.6.2</version>
</dependency>
/**
* xml 转json
*/
public static JSONObject convertXmlToJson(String xml) throws IOException {
XmlMapper xmlMapper = new XmlMapper();
JSONObject param = xmlMapper.readValue(xml, JSONObject.class);
return param;
}
利用XmlMapper这个类, 简单两段代码就可以搞定 但是该方法有个缺点, 如果你的xml字符串转换的内容里 有数组的情况下, 直接这样转是不行的。 这种情况就要自己建立相应的实体类来做接收。 注:实体要有相应的getset方法, 并要保证和xml中的字段名一一对应。