简易Java Bean转JSON

临时写出来的,没考虑太多,暂时不支持二维以上数组,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 {

	@Test
	public 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>();
			//存放最终生成的JSOn
			StringBuilder 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 + "\"");
							else
								tempSb.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 + "\"");
							else
								tempSb.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 block
			e.printStackTrace();
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.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"}


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值