最近工作时遇到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 = 0; 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:
12|zhangsan
对象转map:
对象转换的map结果:zhangsan
对象转换的map结果:{sex=男, name=zhangsan, id=1, age=12}
map转xml:
map 转换的xml结果:<xml><age>12</age>
<id>1</id>
<name>zhangsan</name>
<sex>男</sex>
</xml>
xml遍历解析:
传入的xml解析结果如下:
name:age| value:12
name:id| value:1
name:name| value:zhangsan
name:sex| value:男