首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

拾掇一些關于FastJSON的知識 以及找來的一個工具类测试

2012-06-27 
整理一些關于FastJSON的知識 以及找來的一個工具类测试fastjson 是一个性能很好的 Java 语言实现的 JSON

整理一些關于FastJSON的知識 以及找來的一個工具类测试

fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发。

主要特点:

  • 快速FAST (比其它任何基于Java的解析器和生成器更快,包括jackson)
  • 强大(支持普通JDK类包括任意Java Bean Class、Collection、Map、Date或enum)
  • 零依赖(没有依赖其它任何类库除了JDK)

    示例代码:

    import com.alibaba.fastjson.JSON;Group group = new Group();group.setId(0L);group.setName("admin");User guestUser = new User();guestUser.setId(2L);guestUser.setName("guest");User rootUser = new User();rootUser.setId(3L);rootUser.setName("root");group.getUsers().add(guestUser);group.getUsers().add(rootUser);String jsonString = JSON.toJSONString(group);System.out.println(jsonString);

    官方网站:http://www.open-open.com/lib/view/home/1324131055937

    一、JSON规范JSON是一个标准规范,用于数据交互,规范的中文文档如下:http://www.json.org/json-zh.html?参看规范,来对比JSON类库处理结果。?二、fastjson的一些简要说明?1、了解fastjson?Fastjson介绍Fastjson是一个Java语言编写的JSON处理器。
    1、遵循http://json.org标准,为其官方网站收录的参考实现之一。
    2、功能qiang打,支持JDK的各种类型,包括基本的JavaBean、Collection、Map、Date、Enum、泛型。
    3、无依赖,不需要例外额外的jar,能够直接跑在JDK上。
    4、开源,使用Apache License 2.0协议开源。http://code.alibabatech.com/wiki/display/FastJSON/Home如果获得Fastjson?
    SVN:http://code.alibabatech.com/svn/fastjson/trunk/
    WIKI:http://code.alibabatech.com/wiki/display/FastJSON/Home
    Issue Tracking:http://code.alibabatech.com/jira/browse/FASTJSON?2、主要的使用入口?Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。public?static?final?Object parse(String text);?// 把JSON文本parse为JSONObject或者JSONArray?
    public?static?final?JSONObject parseObject(String text);?// 把JSON文本parse成JSONObject????
    public?static?final?<T> T parseObject(String text, Class<T> clazz);?// 把JSON文本parse为JavaBean?
    public?static?final?JSONArray parseArray(String text);?// 把JSON文本parse成JSONArray?
    public?static?final?<T> List<T> parseArray(String text, Class<T> clazz);?//把JSON文本parse成JavaBean集合?
    public?static?final?String toJSONString(Object object);?// 将JavaBean序列化为JSON文本?
    public?static?final?String toJSONString(Object object,?boolean?prettyFormat);?// 将JavaBean序列化为带格式的JSON文本?
    public?static?final?Object toJSON(Object javaObject); 将JavaBean转换为JSONObject或者JSONArray。??3、有关类库的一些说明?SerializeWriter:相当于StringBufferJSONArray:相当于List<Object>JSONObject:相当于Map<String, Object>?JSON反序列化没有真正数组,本质类型都是List<Object>?4、fastjson还有很多很高级的特性,比如支持注解、支持全类型序列化,这些都是很好的特性,功能强大,不在本次测试范围。?三、测试代码?package?lavasoft.stu.json;?

    import?com.alibaba.fastjson.JSON;?
    import?com.alibaba.fastjson.serializer.SerializeConfig;?
    import?com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;?

    import?java.util.*;?

    /**?
    * Created by IntelliJ IDEA.?
    *?
    * @author leizhimin 11-11-22 上午9:15?
    */?
    public?class?Foo {?
    ????????private?String vString =?"vStringhehhehe";?
    ????????private?char?vchar = 'x';?

    ????????private?byte?vbyte = 64;?
    ????????private?short?vshort = 128;?
    ????????private?int?vint = 65535;?
    ????????private?long?vlong = 9999999L;?

    ????????private?float?vfloat = 12.1f;?
    ????????private?double?vdouble = 22.203d;?

    ????????private?boolean?vboolean =?false;?

    //????????private Date vdate = new Date();?
    ????????private?Date dddd =?new?Date();?
    ????????private?Date vDate =?new?Date();?
    ????????private?Date v_Date =?new?Date();?
    ????????private?Object vnull =?null;?

    ????????private?String[] avString = {"aaa",?"bbb",?"ccc"};?
    ????????private?int[] avint = {1, 2, 3, 4};?
    ????????private?boolean[] avboolean = {true,?false,?true,?true};?

    ????????private?List<String> listString =?new?ArrayList<String>();?
    ????????private?Map<String, String> map =?new?HashMap<String, String>();?

    ????????private?Bar bar =?new?Bar();?
    ????????private?Bar[] avBar = {new?Bar(),?new?Bar()};?
    ????????private?List<Bar> listBar =?new?ArrayList<Bar>();?

    ????????{?
    ????????????????listString.add("listString1");?
    ????????????????listString.add("listString2");?
    ????????????????listString.add("listString3");?

    ????????????????map.put("x",?"s11111x");?
    ????????????????map.put("y",?"s22222y");?
    ????????????????map.put("z",?"s33333z");?

    ????????????????listBar.add(new?Bar());?
    ????????????????listBar.add(new?Bar());?
    ????????????????listBar.add(new?Bar());?
    ????????}?



    ????????public?String getvString() {?
    ????????????????return?vString;?
    ????????}?

    ????????public?void?setvString(String vString) {?
    ????????????????this.vString = vString;?
    ????????}?

    ????????public?char?getVchar() {?
    ????????????????return?vchar;?
    ????????}?

    ????????public?void?setVchar(char?vchar) {?
    ????????????????this.vchar = vchar;?
    ????????}?

    ????????public?byte?getVbyte() {?
    ????????????????return?vbyte;?
    ????????}?

    ????????public?void?setVbyte(byte?vbyte) {?
    ????????????????this.vbyte = vbyte;?
    ????????}?

    ????????public?short?getVshort() {?
    ????????????????return?vshort;?
    ????????}?

    ????????public?void?setVshort(short?vshort) {?
    ????????????????this.vshort = vshort;?
    ????????}?

    ????????public?int?getVint() {?
    ????????????????return?vint;?
    ????????}?

    ????????public?void?setVint(int?vint) {?
    ????????????????this.vint = vint;?
    ????????}?

    ????????public?long?getVlong() {?
    ????????????????return?vlong;?
    ????????}?

    ????????public?void?setVlong(long?vlong) {?
    ????????????????this.vlong = vlong;?
    ????????}?

    ????????public?float?getVfloat() {?
    ????????????????return?vfloat;?
    ????????}?

    ????????public?void?setVfloat(float?vfloat) {?
    ????????????????this.vfloat = vfloat;?
    ????????}?

    ????????public?double?getVdouble() {?
    ????????????????return?vdouble;?
    ????????}?

    ????????public?void?setVdouble(double?vdouble) {?
    ????????????????this.vdouble = vdouble;?
    ????????}?

    ????????public?boolean?isVboolean() {?
    ????????????????return?vboolean;?
    ????????}?

    ????????public?void?setVboolean(boolean?vboolean) {?
    ????????????????this.vboolean = vboolean;?
    ????????}?

    ????????public?Date getDddd() {?
    ????????????????return?dddd;?
    ????????}?

    ????????public?void?setDddd(Date dddd) {?
    ????????????????this.dddd = dddd;?
    ????????}?

    ????????public?Date getV_Date() {?
    ????????????????return?v_Date;?
    ????????}?

    ????????public?void?setV_Date(Date v_Date) {?
    ????????????????this.v_Date = v_Date;?
    ????????}?

    ????????public?Date getvDate() {?
    ????????????????return?vDate;?
    ????????}?

    ????????public?void?setvDate(Date vDate) {?
    ????????????????this.vDate = vDate;?
    ????????}?

    ????????public?Object getVnull() {?
    ????????????????return?vnull;?
    ????????}?

    ????????public?void?setVnull(Object vnull) {?
    ????????????????this.vnull = vnull;?
    ????????}?

    ????????public?String[] getAvString() {?
    ????????????????return?avString;?
    ????????}?

    ????????public?void?setAvString(String[] avString) {?
    ????????????????this.avString = avString;?
    ????????}?

    ????????public?int[] getAvint() {?
    ????????????????return?avint;?
    ????????}?

    ????????public?void?setAvint(int[] avint) {?
    ????????????????this.avint = avint;?
    ????????}?

    ????????public?boolean[] getAvboolean() {?
    ????????????????return?avboolean;?
    ????????}?

    ????????public?void?setAvboolean(boolean[] avboolean) {?
    ????????????????this.avboolean = avboolean;?
    ????????}?

    ????????public?List<String> getListString() {?
    ????????????????return?listString;?
    ????????}?

    ????????public?void?setListString(List<String> listString) {?
    ????????????????this.listString = listString;?
    ????????}?

    ????????public?Map<String, String> getMap() {?
    ????????????????return?map;?
    ????????}?

    ????????public?void?setMap(Map<String, String> map) {?
    ????????????????this.map = map;?
    ????????}?

    ????????public?Bar getBar() {?
    ????????????????return?bar;?
    ????????}?

    ????????public?void?setBar(Bar bar) {?
    ????????????????this.bar = bar;?
    ????????}?

    ????????public?Bar[] getAvBar() {?
    ????????????????return?avBar;?
    ????????}?

    ????????public?void?setAvBar(Bar[] avBar) {?
    ????????????????this.avBar = avBar;?
    ????????}?

    ????????public?List<Bar> getListBar() {?
    ????????????????return?listBar;?
    ????????}?

    ????????public?void?setListBar(List<Bar> listBar) {?
    ????????????????this.listBar = listBar;?
    ????????}?
    }?package?lavasoft.stu.json;?

    import?com.alibaba.fastjson.JSON;?
    import?com.alibaba.fastjson.serializer.SerializeConfig;?
    import?com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;?

    import?java.util.Date;?
    import?java.util.Random;?

    /**?
    * Created by IntelliJ IDEA.?
    *?
    * @author leizhimin 11-11-22 上午9:15?
    */?
    public?class?Bar {?
    ????????public?static?SerializeConfig mapping =?new?SerializeConfig();?
    ????????private?String barName;?
    ????????private?int?barAge;?
    ????????private?Date barDate =?new?Date();?
    ????????static?{?
    ????????????????mapping.put(Date.class,?new?SimpleDateFormatSerializer("yyyy-MM-dd"));?
    ????????}?
    ????????{?
    ????????????????Random r =?new?Random();?
    ????????????????barName =?"sss_"+String.valueOf(r.nextFloat());?
    ????????????????barAge = r.nextInt();?
    ????????}?

    ????????public?static?void?main(String[] args) {?
    ????????????????Object obj = JSON.toJSON(new?Bar());?
    ????????????????String x1 = JSON.toJSONString(new?Bar(),?true);?
    ????????????????System.out.println(x1);?
    ????????????????String x2 = JSON.toJSONString(new?Bar(), mapping);?
    ????????????????System.out.println(x2);?
    ????????}?

    ????????public?String getBarName() {?
    ????????????????return?barName;?
    ????????}?

    ????????public?void?setBarName(String barName) {?
    ????????????????this.barName = barName;?
    ????????}?

    ????????public?int?getBarAge() {?
    ????????????????return?barAge;?
    ????????}?

    ????????public?void?setBarAge(int?barAge) {?
    ????????????????this.barAge = barAge;?
    ????????}?

    ????????public?Date getBarDate() {?
    ????????????????return?barDate;?
    ????????}?

    ????????public?void?setBarDate(Date barDate) {?
    ????????????????this.barDate = barDate;?
    ????????}?

    ????????@Override?
    ????????public?String toString() {?
    ????????????????return?"Bar{"?+?
    ????????????????????????????????"barName='"?+ barName + '\'' +?
    ????????????????????????????????", barAge="?+ barAge +?
    ????????????????????????????????", barDate="?+ barDate +?
    ????????????????????????????????'}';?
    ????????}?
    }??package?lavasoft.stu.json;?

    import?com.alibaba.fastjson.JSON;?
    import?com.alibaba.fastjson.JSONArray;?
    import?com.alibaba.fastjson.serializer.SerializeConfig;?
    import?com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;?

    import?java.util.*;?

    /**?
    * Created by 2IntelliJ IDEA.?
    *?
    * @author leizhimin 11-11-22 上午9:45?
    */?
    public?class?Test {?
    ????????private?static?SerializeConfig mapping =?new?SerializeConfig();?static?{?
    ????????????????mapping.put(Date.class,?new?SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));?
    ????????}?

    ????????public?static?void?main(String[] args) {?
    ????????????????Foo f1 =?new?Foo();?
    ????????????????Date date =?new?Date();?
    ????????????????String text = JSON.toJSONString(date, mapping);?
    ????????????????System.out.println(text);?
    ????????????????System.out.println(JSON.toJSONString(f1,?true));?
    ????????????????String x2 =JSON.toJSONString(f1, mapping);?
    ????????????????System.out.println(x2);?
    ????????}?

    ????????public?static?void?json2List(){?
    ????????????????//List -> JSON array?
    ????????????????List<Bar> barList =?new?ArrayList<Bar>();?
    ????????????????barList.add(new?Bar());?
    ????????????????barList.add(new?Bar());?
    ????????????????barList.add(new?Bar());?
    ????????????????String json= JSON.toJSONString(barList,?true);?
    ????????????????System.out.println(json);?
    ????????????????//JSON array -> List?
    ????????????????List<Bar> barList1 = JSON.parseArray(json,Bar.class);?
    ????????????????for?(Bar bar : barList1) {?
    ????????????????????????System.out.println(bar.toString());?
    ????????????????}?
    ????????}?

    ????????public?static?void?json2Map(){?
    ????????????????//Map -> JSON?
    ????????????????Map<String,Bar> map =?new?HashMap<String, Bar>();?
    ????????????????map.put("a",new?Bar());?
    ????????????????map.put("b",new?Bar());?
    ????????????????map.put("c",new?Bar());?
    ????????????????String json = JSON.toJSONString(map,true);?
    ????????????????System.out.println(json);?
    ????????????????//JSON -> Map?
    ????????????????Map<String,Bar> map1 = (Map<String,Bar>)JSON.parse(json);?
    ????????????????for?(String key : map1.keySet()) {?
    ????????????????????????System.out.println(key+":"+map1.get(key));?
    ????????????????}?
    ????????}?

    ????????public?static?void?array2JSON(){?
    ????????????????String[] arr_String????= {"a","b","c"};?
    ????????????????String json_arr_String = JSON.toJSONString(arr_String,true);?
    ????????????????System.out.println(json_arr_String);?
    ????????????????JSONArray jsonArray = JSON.parseArray(json_arr_String);?
    ????????????????for?(Object o : jsonArray) {?
    ????????????????????????System.out.println(o);?
    ????????????????}?
    ????????????????System.out.println(jsonArray);?
    ????????}?
    ????????public?static?void?array2JSON2(){?
    ????????????????Bar[] arr_Bar????= {new?Bar(),new?Bar(),new?Bar()};?
    ????????????????String json_arr_Bar = JSON.toJSONString(arr_Bar,true);?
    ????????????????System.out.println(json_arr_Bar);?
    ????????????????JSONArray jsonArray = JSON.parseArray(json_arr_Bar);?
    ????????????????for?(Object o : jsonArray) {?
    ????????????????????????System.out.println(o);?
    ????????????????}?
    ????????????????System.out.println(jsonArray);?
    ????????}?

    ????????public?static?void?map2JSON(){?
    ????????????????Map map =?new?HashMap();?
    ????????????????map.put("a","aaa");?
    ????????????????map.put("b","bbb");?
    ????????????????map.put("c","ccc");?
    ????????????????String json=JSON.toJSONString(map);?
    ????????????????System.out.println(json);?
    ????????????????Map map1 = JSON.parseObject(json);?
    ????????????????for?(Object o : map.entrySet()) {?
    ????????????????????????Map.Entry<String,String> entry = (Map.Entry<String,String>)o;?
    ????????????????????????System.out.println(entry.getKey()+"--->"+entry.getValue());?
    ????????????????}?
    ????????}?
    }??说明:SerializeConfig:是对序列化过程中一些序列化过程的特殊配置,这里用作日期格式的定义。有关需要带类型的全类型序列化过程,需要调用JSON.toJSONStringZ()方法。需要美化输出时候,需要打开序列化美化开关,在方法中true那个参数。??输出结果:"2011-11-23 23:30:33"?
    {?
    ??"avBar":[{?
    ????"barAge":174398800,?
    ????"barDate":1322062233062,?
    ????"barName":"sss_0.62378174"?
    ??},{?
    ????"barAge":38938962,?
    ????"barDate":1322062233062,?
    ????"barName":"sss_0.36014742"?
    ??}],?
    ??"avString":["aaa","bbb","ccc"],?
    ??"avboolean":[true,false,true,true],?
    ??"avint":[1,2,3,4],?
    ??"bar":{?
    ????"barAge":1601495948,?
    ????"barDate":1322062233062,?
    ????"barName":"sss_0.46644872"?
    ??},?
    ??"dddd":1322062233046,?
    ??"listBar":[?
    ????{?
    ??????"barAge":-1090113522,?
    ??????"barDate":1322062233062,?
    ??????"barName":"sss_0.83562374"?
    ????},?
    ????{?
    ??????"barAge":478603194,?
    ??????"barDate":1322062233062,?
    ??????"barName":"sss_0.59483266"?
    ????},?
    ????{?
    ??????"barAge":1118357669,?
    ??????"barDate":1322062233062,?
    ??????"barName":"sss_0.9961642"?
    ????}?
    ??],?
    ??"listString":[?
    ????"listString1",?
    ????"listString2",?
    ????"listString3"?
    ??],?
    ??"map":{"x":"s11111x","y":"s22222y","z":"s33333z"},?
    ??"v_Date":1322062233046,?
    ??"vboolean":false,?
    ??"vbyte":64,?
    ??"vchar":"x",?
    ??"vdouble":22.203,?
    ??"vfloat":12.1,?
    ??"vint":65535,?
    ??"vlong":9999999,?
    ??"vshort":128?
    }?
    {"avBar":[{"barAge":174398800,"barDate":"2011-11-23 23:30:33","barName":"sss_0.62378174"},{"barAge":38938962,"barDate":"2011-11-23 23:30:33","barName":"sss_0.36014742"}],"avString":["aaa","bbb","ccc"],"avboolean":[true,false,true,true],"avint":[1,2,3,4],"bar":{"barAge":1601495948,"barDate":"2011-11-23 23:30:33","barName":"sss_0.46644872"},"dddd":"2011-11-23 23:30:33","listBar":[{"barAge":-1090113522,"barDate":"2011-11-23 23:30:33","barName":"sss_0.83562374"},{"barAge":478603194,"barDate":"2011-11-23 23:30:33","barName":"sss_0.59483266"},{"barAge":1118357669,"barDate":"2011-11-23 23:30:33","barName":"sss_0.9961642"}],"listString":["listString1","listString2","listString3"],"map":{"x":"s11111x","y":"s22222y","z":"s33333z"},"v_Date":"2011-11-23 23:30:33","vboolean":false,"vbyte":64,"vchar":"x","vdouble":22.203,"vfloat":12.1,"vint":65535,"vlong":9999999,"vshort":128}?

    Process finished with exit code 0?
    ??fastjson通过各方面测试都很好,功能性能都是No.1,喜欢,它的源代码质量很高,作者也煞费苦心,将性能做到了最好,全免超越其他的json类库。从其中的源代码中,可以学到很多东西,在阅读源码后,不得不佩服作者高超的程序设计水平,和高质量的编码。?感谢alibaba对此工具开源。fastjson-1.1.10-sources.jar?由于fastjson缺乏良好的api文档,在阅读源码过程中,参考了网上一些文档:http://code.alibabatech.com/wiki/display/FastJSON/Homehttp://www.ibm.com/developerworks/cn/education/java/j-generics/section5.htmlhttp://archive.cnblogs.com/a/1713531/http://www.iflym.com/index.php/code/alibaba-fastjson-json-serializer-chapter-source-analyse-one-global-analyse.htmlhttp://www.cnblogs.com/hoojo/archive/2011/04/21/2023805.htmlhttp://archive.cnblogs.com/a/1713531/

    ?

热点排行