简易Java Bean转JSON

来源:互联网 发布:java做题网站 编辑:程序博客网 时间:2024/05/15 04:01

临时写出来的,没考虑太多,暂时不支持二维以上数组,Map,set等数据结构(方法应该类似,进行递归创造json即可).

先附上2个测试bean的代码

public class User {private String username;private String password;private int nubmer;private Date date;private List arrs;private Son son;private Object[] strs;//省略getter,setter}

public class Son {private String name;private int age;<pre name="code" class="html">//省略getter,setter
}

package glut.test;import glut.bean.Son;import glut.bean.User;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.HashSet;import java.util.List;import org.junit.Test;public class MyTest {@Testpublic void test() {List arr = new ArrayList();arr.add("aaa");arr.add(456);Son son = new Son();Object[] strs = { "strs1", 1211, "strs3" };User user = new User();user.setStrs(strs);user.setSon(son);user.setUsername("123");user.setPassword("44");user.setDate(new Date());user.setArrs(arr);user.setNubmer(-99);System.out.println(createJSON(user));}//生成JSON的主要方法public String createJSON(Object beanInstance) {String clsPath = beanInstance.getClass().getName();try {Class cls = Class.forName(clsPath);Field[] fs = cls.getDeclaredFields();Method[] methods = cls.getMethods();//存放属性HashSet<String> fields = new HashSet<String>();//存放属性和对应的get方法HashMap<String, Method> fieldAndMethod = new HashMap<String, Method>();//存放最终生成的JSOnStringBuilder sb = new StringBuilder("{");//将所有的属性添加到集合中for (Field f : fs) {fields.add(f.getName());}//找到所有属性的get方法for (Method m : methods) {String methodName = m.getName();if (methodName.startsWith("get")) {String fieldName = methodName.substring(3, 4).toLowerCase()+ methodName.substring(4);if (fields.contains(fieldName)) {fieldAndMethod.put(fieldName, m);}}}//从存放属性和对应的get方法中,将属性作为json的key,get方法返回值作为json的for (String str : fieldAndMethod.keySet()) {Class returnType = fieldAndMethod.get(str).getReturnType();Object value = fieldAndMethod.get(str).invoke(beanInstance,null);if (value == null) {sb.append("\"" + str + "\":" + null);} else {if (returnType.getSimpleName().equals("String")) {sb.append("\"" + str + "\":\"" + value + "\"");} else if (returnType.getSimpleName().equals("Date")) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");sb.append("\"" + str + "\":\"" + sdf.format(value)+ "\"");} else if (returnType.getSimpleName().contains("List")) {List temp = (List) value;StringBuilder tempSb = new StringBuilder("[");for (Object o : temp) {if (o instanceof String)tempSb.append("\"" + o + "\"");elsetempSb.append(o);tempSb.append(",");}tempSb.deleteCharAt(tempSb.length() - 1);tempSb.append("]");sb.append("\"" + str + "\":" + tempSb.toString());} else if (returnType.getSimpleName().contains("[]")) {Object[] temp = (Object[]) value;StringBuilder tempSb = new StringBuilder("[");for (Object o : temp) {if (o instanceof String)tempSb.append("\"" + o + "\"");elsetempSb.append(o);tempSb.append(",");}tempSb.deleteCharAt(tempSb.length() - 1);tempSb.append("]");sb.append("\"" + str + "\":" + tempSb.toString());} else if (returnType.getSimpleName().equals("int")) {sb.append("\"" + str + "\":" + value);} else {sb.append("\"" + str + "\":" + createJSON(value));}}sb.append(",");}sb.deleteCharAt(sb.length() - 1);sb.append("}");return sb.toString();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SecurityException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}return "error";}}

测试结果:

{"nubmer":-99,"username":"123","arrs":["aaa",456],"strs":["strs1",1211,"strs3"],"son":{"age":0,"name":null},"date":"2015-06-27","password":"44"}


写得比较烂,希望以后有机会再来更新更新~


0 0
原创粉丝点击