天天看點

xml,json,map,java對象互相轉換解析

最近工作時遇到xml,json,map,java對象之間互相轉換解析的問題,剛開始接觸這些有點瑣碎,抽空将用到的一些轉換問題總結了下,友善以後使用:

demo中主要包括以下幾種轉換

- 對象 json 之間互轉

- 對象周遊

- 對象轉map

- map轉xml

pom檔案

<dependency>
            <groupId>net.sf.json-lib</groupId>
            <artifactId>json-lib</artifactId>
            <version>2.4</version>
            <classifier>jdk15</classifier>
        </dependency>
            <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
           

Student 實體

package BinTest.bin;

public class Student {
private String id;
private String name;
private String age;
private String sex;
public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getAge() {
    return age;
}
public void setAge(String age) {
    this.age = age;
}
public String getSex() {
    return sex;
}
public void setSex(String sex) {
    this.sex = sex;
}

}
           

實作類

package BinTest.bin;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dom4j.Element;

import net.sf.json.JSONObject;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;


public class main {

    public static void main(String[] args) throws Exception {
        System.out.println("對象轉json:");
        Student student = new Student();
        student.setId("1");
        student.setName("zhangsan");
        student.setAge("12");
        student.setSex("男");
        JSONObject json = JSONObject.fromObject(student);
        System.out.println("對象轉json結果:" + json.toString());
        System.out.println("");
        System.out.println("根據json轉成相應對象Start:");
        String jsonString = json.toString();
        JSONObject json1 = JSONObject.fromObject(json.toString());
        Student s = new Student();
        s = (Student) JSONObject.toBean(json1, Student.class);
        System.out.println(s.getAge() + "|" + s.getName());
        System.out.println("");
        System.out.println("對象轉map:");
        Map map = new HashMap<String, String>();
        map = ObjToMap(s);
        System.out.println("對象轉換的map結果:" + map.get("name"));
        System.out.println("對象轉換的map結果:" + map.toString());
        System.out.println("");

        System.out.println("map轉xml:");
        String xml = toXml(map);
        System.out.println("map 轉換的xml結果:" + xml);
        System.out.println("");

        System.out.println("xml周遊解析:");
        String xmlString=xml;
        showXml(xmlString);
    }

    /**
     * 
     * @param 對象
     * @return 需要的map
     * @throws Exception
     */
    public static Map ObjToMap(Object e) throws Exception {
        Map<String, String> map = new HashMap<String, String>();
        Class cls = e.getClass();
        Field[] fields = cls.getDeclaredFields();
        for (int i = ; i < fields.length; i++) {
            Field f = fields[i];
            f.setAccessible(true);
            map.put(f.getName(), (String) f.get(e));
        }
        return map;
    }

    /**
     * 轉xml
     * 
     * @param params
     * @return
     */
    public static String toXml(Map<String, String> params) {
        StringBuilder buf = new StringBuilder();
        List<String> keys = new ArrayList<String>(params.keySet());
        Collections.sort(keys);
        buf.append("<xml>");
        for (String key : keys) {
            if (!"".equals(params.get(key))) {
                buf.append("<").append(key).append(">");
                buf.append(params.get(key));
                buf.append("</").append(key).append(">\n");
            }

        }
        buf.append("</xml>");
        return buf.toString();
    }


/**
 * 
 * @param xml
 * @throws DocumentException
 * 
 * 
 * 如果周遊如下格式xml 
 * <xml><param name=age>12</age>
<param name=id>1</id>
<param name=name>zhangsan</name>
<param name=sex>男</sex>
</xml>

則采用如下方法周遊

List<Element> params = root.elements("param");
     for (Element param : params) {
         if ("sign".equals(param.attribute("name").getStringValue())) {
             alipaySign = param.getStringValue();
         }
     }


 */
    public static void showXml(String xml) throws DocumentException {
        Document document = null;
        document = DocumentHelper.parseText(xml);
         Element root = document.getRootElement();
        List<Element> list =root.elements();
        System.out.println("傳入的xml解析結果如下:");
        for (Element e : list) {
            System.out.println("name:"+e.getName()+"| value:"+e.getStringValue());
        }
    }

}
           

結果輸出

對象轉json:
對象轉json結果:{"age":"12","id":"1","name":"zhangsan","sex":"男"}

根據json轉成相應對象Start:
|zhangsan

對象轉map:
對象轉換的map結果:zhangsan
對象轉換的map結果:{sex=男, name=zhangsan, id=, age=}

map轉xml:
map 轉換的xml結果:<xml><age></age>
<id></id>
<name>zhangsan</name>
<sex>男</sex>
</xml>
xml周遊解析:
傳入的xml解析結果如下:
name:age| value:
name:id| value:
name:name| value:zhangsan
name:sex| value:男
           

繼續閱讀