将一个对象转为json 对象
定义实体:
package com.ziv.bean;
import java.util.List;
public class User {
private Integer[] id;
private String name;
private List<UserDesc> userDescs;
public void setId(Integer[] id) {
this.id = id;
}
public Integer[] getId() {
return id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<UserDesc> getUserDescs() {
return userDescs;
}
public void setUserDescs(List<UserDesc> userDescs) {
this.userDescs = userDescs;
}
public User(Integer[] id, String name, List<UserDesc> userDescs) {
super();
this.id = id;
this.name = name;
this.userDescs = userDescs;
}
}
package com.ziv.bean;
import java.util.List;
public class UserDesc {
private Integer id;
private String code;
private String name;
private String[] strings;
private List<Opector> opectors;
public UserDesc(Integer id, String code, String name, String[] strings,
List<Opector> opectors) {
super();
this.id = id;
this.code = code;
this.name = name;
this.strings = strings;
this.opectors = opectors;
}
public String[] getStrings() {
return strings;
}
public void setStrings(String[] strings) {
this.strings = strings;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Opector> getOpectors() {
return opectors;
}
public void setOpectors(List<Opector> opectors) {
this.opectors = opectors;
}
}
package com.ziv.bean;
import java.util.Date;
public class Opector {
private Integer id;
private String msg;
private Date startDate;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Date getStartDate() {
return startDate;
}
public void setStartDate(Date startDate) {
this.startDate = startDate;
}
public Opector(Integer id, String msg, Date startDate) {
super();
this.id = id;
this.msg = msg;
this.startDate = startDate;
}
}
核心类,处理对象
package com.ziv.util.json;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import org.junit.Test;
import com.ziv.bean.Opector;
import com.ziv.bean.User;
import com.ziv.bean.UserDesc;
public class JSON {
/* 传入一个List集合转为json */
public static String getJson(List<?> obj){
StringBuffer sb = new StringBuffer();
sb.append("[");
for (Object object : obj) {
sb.append(jsons(object)).append(",");
}
sb.replace(sb.lastIndexOf(","), sb.length(), "");
sb.append("]");
return sb.toString();
}
/* 转入一个对象转为json */
public static String getJson(Object obj){
return jsons(obj).toString();
}
/* json转换,但是当字段的值为空时,不返回该值 */
private static StringBuffer jsons(Object obj) {
if(obj == null) return null;
StringBuffer sb = new StringBuffer().append("{");
try {
Object originalObj = obj;
Class clazz = obj.getClass();
Field[] fields = clazz.getDeclaredFields();
String type = ""; /* 属性的类型 */
String name = ""; /* 属性的名称 */
for (int i = 0; i < fields.length; i++) {
String[] split = fields[i].toString().split(" ");
type = split[1].substring(split[1].lastIndexOf(".") + 1);
name = split[2].substring(split[2].lastIndexOf(".") + 1);
Method get = clazz.getMethod("get" + cap(name));
if(type.equalsIgnoreCase("Integer[]") || type.equalsIgnoreCase("Int[]")){
Integer[] value = (Integer[]) get.invoke(originalObj);
if (value !=null) {
sb.append("\""+name+"\": [");
for (Integer integer : value) {
sb.append(String.valueOf(integer)+",");
}
sb.replace(sb.lastIndexOf(","), sb.length(), "],");
}
} else if(type.equalsIgnoreCase("Integer") || type.equalsIgnoreCase("int")){
Integer value = (Integer) get.invoke(originalObj);
if(value != null){
sb.append("\""+name+"\":"+value+",");
}
} else if(type.equalsIgnoreCase("String")){
String value = (String) get.invoke(originalObj);
if(value != null){
sb.append("\""+name+"\":\""+value+"\",");
}
} else if(type.equalsIgnoreCase("String[]")){
String[] value = (String[]) get.invoke(originalObj);
if(value != null){
sb.append("\""+name+"\": [");
for (String string : value) {
sb.append("\"").append(String.valueOf(string)).append("\"").append(",");
}
sb.replace(sb.lastIndexOf(","), sb.length(), "],");
}
}
else if(type.equalsIgnoreCase("Date")){
Date value = (Date) get.invoke(originalObj);
if(value != null){
sb.append("\""+name+"\":"+value.getTime()+",");
}
}
else if(type.equalsIgnoreCase("List")){
List<?> arrays = (List<?>)get.invoke(originalObj);
if(arrays != null){
sb.append("\""+name+"\":[");
for (int j = 0; j < arrays.size(); j++) {
if(j == arrays.size() -1){
sb.append(getJson(arrays.get(j))).append("],");
}else{
sb.append(getJson(arrays.get(j))).append(",");
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
sb.replace(sb.lastIndexOf(","), sb.length(), "").append("}");
return sb;
}
/* 将字符串首字母变为大写 */
private static String cap(String str) {
return str.substring(0,1).toUpperCase() + str.substring(1);
}
}
测试
package com.ziv.bean;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import javax.swing.JList;
import com.ziv.util.json.JSON;
public class Test {
public static void main(String[] args) {
List<Opector> asList = Arrays.asList(
new Opector(100001, "登录", new Date()),
new Opector(100011, null, new Date()),
new Opector(10101, "退出", null)
);
List<UserDesc> udDescs = Arrays.asList(
new UserDesc(101,"OK","嘻哈哈",new String[]{"xiao","样"},asList),
new UserDesc(102,"休息下来了","哟呵呵",new String[]{"普欧尼","^(* ̄(oo) ̄)^"},asList)
);
User user = new User(new Integer[]{1,2,3}, "xx", udDescs);
List<?> jList = Arrays.asList(
new User(null, "xx", null),
new User(new Integer[]{1,2,3}, "是的发送到", udDescs),
new User(new Integer[]{1,2,3}, null, udDescs),
new User(new Integer[]{1,2,3}, "阿斯蒂芬", udDescs)
);
// System.out.println(JSON.getJson(jList));
System.out.println(JSON.getJson(user));
}
}