最近工作時遇到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:男