使用java反射簡單模擬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 list = (List) 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 list = (List) 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 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 }]}


分享到:


相關文章: