import java.io.CharArrayReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.xml.XMLSerializer;
/**
* JSON-XML转换工具
* <请替换成功能描述>
* <请替换成详细描述>
* @author caizh
* @since [1.0.0]
* @version [1.0.0,2017年2月13日]
*/
public class JsonXmlUtils {
private static final XMLSerializer SERIALIZER = new XMLSerializer();
/**
* xml转化为json
* <请替换成功能描述>
* <请替换成详细描述>
* @param xml
* @return
* @author caizh
* @since [1.0.0]
* @version [1.0.0,2017年2月13日]
*/
public static String xmlToJSON(String xml){
return SERIALIZER.read(xml).toString();
}
/**
* json转化为xml
* <请替换成功能描述>
* <请替换成详细描述>
* @param json
* @return
* @author caizh
* @since [1.0.0]
* @version [1.0.0,2017年2月13日]
*/
public static String jsonToXML(String json){
JSONObject jobj = JSONObject.fromObject(json);
String xml = SERIALIZER.write(jobj);
return xml;
}
/**
* json转map
* <请替换成功能描述>
* <请替换成详细描述>
* @param jsonStr
* @return
* @author caizh
* @since [1.0.0]
* @version [1.0.0,2017年2月13日]
*/
public static Map
Map
//最外层解析
JSONObject json = JSONObject.fromObject(jsonStr);
for(Object k:json.keySet()){
Object v = json.get(k);
//如果内层还是数组的话,继续解析
if(v instanceof JSONArray){
List
/**
* json转map
* <请替换成功能描述>
* <请替换成详细描述>
* @param jsonStr
* @return
* @author caizh
* @since [1.0.0]
* @version [1.0.0,2017年2月13日]
*/
public static Map
Map
//最外层解析
JSONObject json = JSONObject.fromObject(jsonStr);
for(Object k:json.keySet()){
Object v = json.get(k);
if(null!=v){
map.put(k.toString(), v.toString());
}
}
return map;
}
/**
* xml转map
* <请替换成功能描述>
* <请替换成详细描述>
* @param xml 内容
* @return
* @author caizh
* @since [1.0.0]
* @version [1.0.0,2017年2月13日]
*/
public static Map
return xmlToMap(xml,null);
}
/**
* xml转map
* <请替换成功能描述>
* <请替换成详细描述>
* @param xml xml内容
* @param xpath 指定路径(不用指定根目录)
* @return
* @author caizh
* @since [1.0.0]
* @version [1.0.0,2017年2月13日]
*/
@SuppressWarnings("unchecked")
public static Map
// SAXReader就是一个管道,用一个流的方式,把xml文件读出来
SAXReader reader = new SAXReader();
//下面的是通过解析xml字符串的
Document doc = null;
try{
doc = reader.read(new CharArrayReader(xml.toCharArray()));
}catch(DocumentException e){
e.printStackTrace();
}
// 获取根节点
Element rootElt = doc.getRootElement(); // 获取根节点
//System.out.println("根节点:" + rootElt.getName()); // 拿到根节点的名称
Map
if(xpath==null || xpath.equals("")){//转换全部
map.put(rootElt.getName(), eleTomap(rootElt));
}else{
Element ele = (Element) rootElt.selectSingleNode(xpath);
if(ele!=null){
//判断是否是多个匹配
if(rootElt.selectNodes(xpath).size()>1){
List
for (Element element : (List
list.add(eleTomap(element));
}
map.put(ele.getName(), list);
}else{
map.put(ele.getName(), eleTomap(ele));
}
}
}
return map;
}
/**
* element对象转化为map
* <请替换成功能描述>
* <请替换成详细描述>
* @param rootElt
* @return
* @author caizh
* @since [1.0.0]
* @version [1.0.0,2017年2月13日]
*/
@SuppressWarnings("unchecked")
private static Map
Map
List
for (Element ele : eles) {
if(ele.elements().size()==0){
map.put(ele.getName(), ele.getTextTrim());
}else if(ele.elements().size()==1){
map.put(ele.getName(), eleTomap(ele));
}else {//>1
if(map.containsKey(ele.getName())){
List
if(List.class.isAssignableFrom(map.get(ele.getName()).getClass())){
list = (List
}else{
list = new ArrayList
list.add((Map
}
list.add(eleTomap(ele));
map.put(ele.getName(), list);
}else{
map.put(ele.getName(), eleTomap(ele));
}
}
// System.out.println(" " + ele.getName()); // 拿到节点的名称
}
return map;
}
public static void main(String[] args) {
String xml = "0
http://b110.photo.store.qq.com/psbe?/V10l2eOl01dgnV/FhSHGWUG2FNGCJERJqsUvB2QX359X35Twlgea5uXK.Rn4cdhY4nTI*1EvrFjw83m/a/dG4AAAAAAAAA&bo=SAaAAgAAAAAFB.g!
http://b110.photo.store.qq.com/psbe?/V10l2eOl01dgnV/lpX9Kd98uAOCcAkVV2zSlq0U.rS9mjlHDW70x2l67PlBtCgRaLHR9J.wCbKy8*Nu/a/dG4AAAAAAAAA
String json = xmlToJSON(xml);
System.out.println("json="+json);
xml = jsonToXML(json);
System.out.println("xml = "+xml);
}
}