在做項(xiàng)目時(shí)没炒,公司催進(jìn)度,往往是接口都還沒有寫好犯戏,產(chǎn)品就開始要各種演示版本送火,為了演示的時(shí)候能展示數(shù)據(jù),往往就需要客戶端自己模擬數(shù)據(jù)先匪,以達(dá)到展示的目的种吸,這是苦逼,我就上網(wǎng)百度了一下呀非,再發(fā)揮自己的聰明才智坚俗,寫了一個(gè)模擬json數(shù)據(jù)的轉(zhuǎn)化工具類,方便大家自舉岸裙。
public class JsonUtil {
public static String class2json(Object obj) {
// 通過反射獲取到類
Class<? extends Object> clazz = obj.getClass();
// 獲取類中所有的字段
Field[] fields = clazz.getDeclaredFields();
StringBuffer buffer = new StringBuffer();
buffer.append("{");
// 設(shè)置setAccessible方法能獲取到類中的私有屬性和方法
Field.setAccessible(fields, true);
for (Field field : fields) {
try {
Object object = field.get(obj);
// 獲取到該屬性對(duì)應(yīng)類型名稱
String fieldName = field.getType().getSimpleName();
// 如果該屬性的值為空
if (object == null) {
// 根據(jù)類型判斷追加的值
if (fieldName.equals("String")) {
buffer.append("\"" + field.getName() + "\":\"\",");
} else if (fieldName.equals("Boolean")
|| fieldName.equals("Integer")
|| fieldName.equals("Double")
|| fieldName.equals("Float")
|| fieldName.equals("Long")) {
buffer.append("\"" + field.getName() + "\":0,");
}
else {
buffer.append("\"" + field.getName() + "\":null,");
}
} else {
// 獲取到該屬性的值對(duì)應(yīng)的類
Class<? extends Object> fieldclass = object.getClass();
String simpleName = fieldclass.getSimpleName();
if (simpleName.equals("String")) {
buffer.append("\"" + field.getName() + "\":\""
+ field.get(obj) + "\",");
} else if (simpleName.equals("Boolean")
|| simpleName.equals("Integer")
|| simpleName.equals("Double")
|| simpleName.equals("Float")
|| simpleName.equals("Long")) {
buffer.append("\"" + field.getName() + "\":"
+ field.get(obj) + ",");
} else if (simpleName.equals("Date")) {
Date date = (Date) object;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"yyyy-MM-dd hh:mm:ss");
String simdate = simpleDateFormat.format(date);
buffer.append("\"" + field.getName() + "\":\""
+ simdate + "\",");
} else if (simpleName.equals("ArrayList")
|| simpleName.equals("LinkedList")) {
// 將獲取到的值強(qiáng)轉(zhuǎn)為list集合
List<Object> list = (List<Object>) object;
buffer.append("\"" + field.getName() + "\":[");
// 執(zhí)行l(wèi)istTojson方法將獲取到的list轉(zhuǎn)為json格式
buffer = listTojson(buffer, list).append("]");
} else {
buffer = beanTojson(object, buffer).append(",");
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
buffer = new StringBuffer(buffer.substring(0, buffer.length() - 1));
buffer.append("}");
return buffer.toString();
}
public static StringBuffer listTojson(StringBuffer buffer, List list)
throws IllegalArgumentException, IllegalAccessException {
// 遍歷傳過來的list數(shù)組
for (Object object : list) {
// 判斷遍歷出的值是否為空
if (object == null) {
buffer.append(",");
} else {
Class<? extends Object> class1 = object.getClass();
String simpleName = class1.getSimpleName();
if (simpleName.equals("String")) {
buffer.append("\"" + object.toString() + "\",");
} else if (simpleName.equals("Boolean")
|| simpleName.equals("Integer")
|| simpleName.equals("Double")
|| simpleName.equals("Float")
|| simpleName.equals("Long")) {
buffer.append("" + object.toString() + ",");
} else if (simpleName.equals("Date")) {
Date date = (Date) object;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"yyyy-MM-dd hh:mm:ss");
String simdate = simpleDateFormat.format(date);
buffer.append("" + simdate + ",");
} else {
Class<? extends Object> class2 = object.getClass();
Field[] fields = class2.getDeclaredFields();
Field.setAccessible(fields, true);
buffer.append("{");
// 遍歷對(duì)象中的所有字段獲取字段值和字段名稱拼成json字符串
for (Field field : fields) {
Object fieldobj = field.get(object);
String fieldName = field.getType().getSimpleName();
if (fieldobj == null) {
if (fieldName.equals("String")) {
buffer.append("\"" + field.getName()
+ "\":\"\",");
}
else {
buffer.append("\"" + field.getName()
+ "\":null,");
}
}
else {
String fsimpleName = fieldobj.getClass()
.getSimpleName();
if (fsimpleName.equals("String")) {
buffer.append("\"" + field.getName() + "\":\""
+ field.get(object) + "\",");
} else if (fsimpleName.equals("Boolean")
|| fsimpleName.equals("Integer")
|| fsimpleName.equals("Double")
|| fsimpleName.equals("Float")
|| fsimpleName.equals("Long")) {
buffer.append("\"" + field.getName() + "\":"
+ field.get(object) + ",");
} else if (fsimpleName.equals("Date")) {
Date date = (Date) object;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"yyyy-MM-dd hh:mm:ss");
String simdate = simpleDateFormat.format(date);
buffer.append("\"" + field.getName() + "\":"
+ simdate + ",");
} else {
buffer = beanTojson(fieldobj, buffer).append(
",");
}
}
}
buffer = new StringBuffer(""
+ buffer.substring(0, buffer.length() - 1) + "");
buffer.append("},");
}
}
}
buffer = new StringBuffer("" + buffer.substring(0, buffer.length() - 1)
+ "");
buffer.append("]");
return buffer;
}
public static StringBuffer beanTojson(Object obj, StringBuffer buffer)
throws IllegalArgumentException, IllegalAccessException {
Class<? extends Object> clazz = obj.getClass();
Field[] declaredFields = clazz.getDeclaredFields();
Field.setAccessible(declaredFields, true);
buffer.append("\"" + clazz.getSimpleName() + "\":{");
for (Field field : declaredFields) {
Object object = field.get(obj);
String fieldName = field.getType().getSimpleName();
if (object == null) {
if (fieldName.equals("String")) {
buffer.append("\"" + field.getName() + "\":\"\",");
}
else {
buffer.append("\"" + field.getName() + "\":null,");
}
} else {
Class<? extends Object> fieldclass = object.getClass();
String simpleName = fieldclass.getSimpleName();
if (simpleName.equals("String")) {
buffer.append("\"" + field.getName() + "\":\""
+ field.get(obj) + "\",");
} else if (simpleName.equals("Boolean")
|| simpleName.equals("Integer")
|| simpleName.equals("Double")
|| simpleName.equals("Float")
|| simpleName.equals("Long")) {
buffer.append("\"" + field.getName() + "\":"
+ field.get(obj) + ",");
} else if (simpleName.equals("Date")) {
Date date = (Date) object;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"yyyy-MM-dd hh:mm:ss");
String simdate = simpleDateFormat.format(date);
buffer.append("\"" + field.getName() + "\":\"" + simdate
+ "\",");
} else if (simpleName.equals("ArrayList")
|| simpleName.equals("LinkedList")) {
List<Object> list = (List<Object>) object;
buffer = listTojson(buffer, list);
} else {
buffer = beanTojson(object, buffer).append("}");
}
}
}
buffer = new StringBuffer("" + buffer.substring(0, buffer.length() - 1)
+ "");
buffer.append("}");
return buffer;
}
}
使用方法
1.先定義好自己的返回樣式
public class Result {
int code;
String message;
List<Pig> pigArray;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public List<Pig> getPigArray() {
return pigArray;
}
public void setPigArray(List<Pig> pigArray) {
this.pigArray = pigArray;
}
}
public class Pig {
int age;
int weight;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
}
最后在程序中調(diào)用
Result rs=new Result();
rs.setCode(1);
rs.setMessage("用戶有數(shù)據(jù)");
List<Pig> list=new ArrayList<Pig>();
Pig p= new Pig();
p.setAge(10);
p.setWeight(23);
list.add(p);
rs.setPigArray(list);
System.out.println("json:" +JsonUtil.class2json(rs));
效果如下:
{
"code": 1,
"message": "用戶有數(shù)據(jù)",
"pigArray": [{
"age": 10,
"weight": 23
}]
}