使用json-lib实现的JSON产生器(Java版本)

来源:互联网 发布:如何禁止软件自动升级 编辑:程序博客网 时间:2024/04/27 21:58

今天使用了一些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<Object> or List<Map> to JSON string.

*/

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<String,Object> map=new LinkedHashMap<String,Object>();

        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<Object> list, String... params)throws Exception{

        if(list.size()==0)  return"";

        StringBuilder json=new StringBuilder("[");  //通过StringBuilder来拼接JSON数组字符串。这里最好不要用String的+运算或concat函数,因为这样会产生好多临时对象。

        for(int i=0;i<list.size();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<Object> 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等都是使用类似的键值对存储机制。


原创粉丝点击