今天使用了一些JSON的jar包,感觉非常非常便利。开始我是在Action中使用字符串来拼接出JSON。
首先,需要jar包为:commons-beanutils-1.7.0.jar,commons-lang-2.6.jar,ezmorph-1.0.6.jar,json-lib-2.3-jdk15.jar四个包。
先直接贴代码:
/**
@author shaofeng
This is a translater from Java object, Java Map,List
*/
public class JSONTranslater {
//所有方法均为静态,对象转换为json字符串。
//如对象A,包含属性a1,a2,值分别为字符串v1,v2,则json串为{"a1":"v1", "a2":"v2"}
public static String object2Json(Object o){
if(o==null) return""; //对象为空时返回空字符串
JSONObject json = JSONObject.fromObject(o);
return json.toString();
}
//将Map转换为json字符串。
//该方法的优点是,能够将某个对象的某些属性进行json字符串化。使用了JDK1.5引入的可变参数,和Java的反射机制。当然,反射的基础是该类为标准的Bean。这样,就能通过属性名称来得出该类的getter方法,并且调用即可。
//Map中的每个映射均为"属性名-->属性值“
//如,调用String json=JSONTranslater.map2Json(instanceOfA, "a1","a2","a3");
public static String map2Json(Object o,String... params) throws Exception{
if(o==null) return"";
Map
Class objCls=o.getClass(); //获取元对象
for(String param:params){
String methodName="get"+param.substring(0,1).toUpperCase()+param.substring(1); //生成getter方法名
Method method=objCls.getMethod(methodName);
Object value=method.invoke(o); //调用getter,得到属性值
map.put(param,value); //属性名和值存入map
}
JSONObject json = JSONObject.fromObject(map); //将Map转换为JSON
return json.toString();
}
//将对象链表转换为JSON数组,JSON数组即,[{...}, {...}, ... ]形式
//其中,可以对对象的某些属性指定,生成某些属性的JSON。
//该方法基础是map2Json方法。
public static String mapList2Json(List
if(list.size()==0) return"";
StringBuilder json=new StringBuilder("["); //通过StringBuilder来拼接JSON数组字符串。这里最好不要用String的+运算或concat函数,因为这样会产生好多临时对象。
for(int i=0;i Object o=list.get(i); //遍历list中的每个对象 json.append(map2Json(o,params)); //对每个对象的某些属性进行JSON化 if(i==(list.size()-1)) json.append("]"); //拼接JSON数组字符串 else json.append(","); } return json.toString(); }
//将对象列表转换为JSON数组字符串 public static String objList2Json(List if(list.size()==0) return""; JSONArray json = JSONArray.fromObject(list); return json.toString(); } } 下来,就能使用该JSON产生器了。比如,在一个jsp中,想要异步地通过AJAX获取页面更新后的内容,或者,想要通过触发一个鼠标事件后,不刷新页面的前提下,插入一些数据库中的数据等等等等,就可以配合jQuery中的$.ajax()函数和$.each()函数等,进行对JSON的获取和对JSON数组的遍历。JSON是个很方便的数据格式,在js中,可以将JSON看做关联数组来处理,也可以按照对象方式来处理,如:json["key"]或json.key。这种映射关系很常见,在数据交换格式中比较有优势,如session、cookie、WebStorage API等都是使用类似的键值对存储机制。