JSONXml转换工具类

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 jsonToMap(String jsonStr){
        Map map = new HashMap();
        //最外层解析
        JSONObject json = JSONObject.fromObject(jsonStr);
        for(Object k:json.keySet()){
            Object v = json.get(k);
            //如果内层还是数组的话,继续解析
            if(v instanceof JSONArray){
                List> list = new ArrayList>();
                @SuppressWarnings("unchecked")
                Iterator it = ((JSONArray)v).iterator();
                while(it.hasNext()){
                    JSONObject json2 = it.next();
                    list.add(jsonToMap(json2.toString()));
                }
                map.put(k.toString(), list);
            }else{
                map.put(k.toString(), v);
            }
        }
        return map;
    }

    /**
     * json转map
     * <请替换成功能描述>

     * <请替换成详细描述>
     * @param jsonStr
     * @return
     * @author caizh
     * @since [1.0.0]
     * @version [1.0.0,2017年2月13日]
     */
    public static Map jsonToMaoString(String jsonStr){
        Map map = new HashMap();
        //最外层解析
        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 xmlToMap(String xml){
        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 xmlToMap(String xml, String xpath) {
        // 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 map = new HashMap();

        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> list = new ArrayList>();
                    for (Element element : (List)rootElt.selectNodes(xpath)) {
                        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 eleTomap(Element rootElt) {
        Map map = new HashMap();
        List eles = rootElt.elements();
        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> list = null;
                    if(List.class.isAssignableFrom(map.get(ele.getName()).getClass())){
                        list = (List>) map.get(ele.getName());
                    }else{
                        list = new ArrayList>();
                        list.add((Map)map.get(ele.getName()));
                    }
                    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 = "000014536025701220000 true54732000640000NDR0F8gbCAo3pFYmIIcrbgAAAAAAAAA!1453602570photo-blank0013603842313603842314248050100

http://b110.photo.store.qq.com/psbe?/V10l2eOl01dgnV/FhSHGWUG2FNGCJERJqsUvB2QX359X35Twlgea5uXK.Rn4cdhY4nTI*1EvrFjw83m/a/dG4AAAAAAAAA&bo=SAaAAgAAAAAFB.g!
000NDR0F8gbCAo3pFYmIIcrbgAAAAAAAAA!2016-01-24 10:29:30http://b110.photo.store.qq.com/psbe?/V10l2eOl01dgnV/FhSHGWUG2FNGCJERJqsUvB2QX359X35Twlgea5uXK.Rn4cdhY4nTI*1EvrFjw83m/b/dG4AAAAAAAAA&bo=SAaAAgAAAAAFB.g!160806964053031000001001001NDR0F8gbCAo3pFYmIIcrbgAAAAAAAAA!14536025540V10l2eOl01dgnV14536025711453602867我的秘密136038423136038423
http://b110.photo.store.qq.com/psbe?/V10l2eOl01dgnV/lpX9Kd98uAOCcAkVV2zSlq0U.rS9mjlHDW70x2l67PlBtCgRaLHR9J.wCbKy8*Nu/a/dG4AAAAAAAAA
531http://b110.photo.store.qq.com/psbe?/V10l2eOl01dgnV/lpX9Kd98uAOCcAkVV2zSlq0U.rS9mjlHDW70x2l67PlBtCgRaLHR9J.wCbKy8*Nu/b/dG4AAAAAAAAA0
11";
        String json = xmlToJSON(xml);
        System.out.println("json="+json);
        xml = jsonToXML(json);
        System.out.println("xml = "+xml);
    }

}

你可能感兴趣的:(JSONXml转换工具类)