JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式!在javascript中,经常用于前台与后台的数据交互。在实际的工作中,我们经常需要把后台的JavaBean转换成JSON然后传给前台,网上有很多成熟的转换工具,其实我们自己也可以动手写一个,代码很简单!
package com.test.json;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
public class Json {
/**
* 对象生成json
* @param object
* @return
*/
public static String objectToJson(Object object){
StringBuffer sb = new StringBuffer();
if(object != null){
String className = object.getClass().getSimpleName();
sb.append("{\"");
sb.append(className);
sb.append("\"");
sb.append(":[");
generateJson(generateMethodList(object),object,sb);
sb.append("]}");
}
return sb.toString();
}
/**
* list 生成json
* @param list
* @return
*/
public static String ListToJson(List<? extends Object> list){
StringBuffer sb = new StringBuffer();
int index = 0;
if(list.size() > 0){
Object firstObject = list.get(0);
String className = firstObject.getClass().getSimpleName();
sb.append("{\"");
sb.append(className);
sb.append("\"");
sb.append(":[");
for(Object object : list ){
generateJson(generateMethodList(object),object,sb);
if(!(index++ == list.size() -1)){
sb.append(",");
}
}
sb.append("]}");
}
return sb.toString();
}
/**
* set生成Json
* @param set
* @return
*/
public static String setToJson(Set<? extends Object> set){
if(set.size() > 0){
List<Object> list = new ArrayList<Object>();
list.addAll(set);
return Json.ListToJson(list);
}else{
return null;
}
}
/**
* 生成json
* @param methodList
* @param object
* @param sb
*/
private static void generateJson( List<Method> methodList,Object object,StringBuffer sb){
int index = 0;
for(Method method : methodList){
String methodName = method.getName();
methodName = methodName.replace("get", "").toLowerCase();
try {
//执行get方法,取得值
String methodValue = method.invoke(object, null).toString();
sb.append("{\"");
sb.append(methodName);
sb.append("\":\"");
sb.append(methodValue);
sb.append("\"}");
if(!(index++ == methodList.size() - 1)){
sb.append(",");
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
/**
* 取得所有以get开头的方法,不包括getClass方法
* @param object
*/
private static List<Method> generateMethodList(Object object){
List<Method> methodList = new ArrayList<Method>();
Method[] methods = object.getClass().getMethods();
for(Method method : methods ){
String methodName = method.getName();
if(methodName.startsWith("get") && !methodName.endsWith("Class")){
methodList.add(method);
}
}
return methodList;
}
}