05.24 使用java反射簡單模擬json數據

在做項目時,公司催進度,往往是接口都還沒有寫好,產品就開始要各種演示版本,為了演示的時候能展示數據,往往就需要客戶端自己模擬數據,以達到展示的目的,這是苦逼,我就上網百度了一下,再發揮自己的聰明才智,寫了一個模擬json數據的轉化工具類,方便大家自舉。

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("{");
// 設置setAccessible方法能獲取到類中的私有屬性和方法
Field.setAccessible(fields, true);
for (Field field : fields) {

try {

Object object = field.get(obj);

// 獲取到該屬性對應類型名稱
String fieldName = field.getType().getSimpleName();

// 如果該屬性的值為空
if (object == null) {

// 根據類型判斷追加的值
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 {

// 獲取到該屬性的值對應的類

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集合
List<object> list = (List<object>) object;
buffer.append("\\"" + field.getName() + "\\":[");

// 執行listTojson方法將獲取到的list轉為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數組
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("{");
// 遍歷對象中的所有字段獲取字段值和字段名稱拼成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;
}

}
/<object>/<object>/<object>/<object>

使用方法

1.先定義好自己的返回樣式

public class Result {
int code;
String message;
List 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 getPigArray() {
return pigArray;
}
public void setPigArray(List 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;
}

}

最後在程序中調用

Result rs=new Result();
rs.setCode(1);
rs.setMessage("用戶有數據");

List list=new ArrayList();
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": "用戶有數據",
"pigArray": [{
"age": 10,
"weight": 23
}]
}


分享到:


相關文章: