阿里巴巴Json工具-Fastjson讲解


Fastjson是阿里巴巴公司开源的速度最快的Json和对象转换工具,一个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

2、主要的使用入口

Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。 publicstaticfinalObject parse(String text);// 把JSON文本parse为JSONObject或者JSONArray
publicstaticfinalJSONObject parseObject(String text);// 把JSON文本parse成JSONObject
publicstaticfinal<T> T parseObject(String text, Class<T> clazz);// 把JSON文本parse为JavaBean
publicstaticfinalJSONArray parseArray(String text);// 把JSON文本parse成JSONArray
publicstaticfinal<T> List<T> parseArray(String text, Class<T> clazz);//把JSON文本parse成JavaBean集合
publicstaticfinalString toJSONString(Object object);// 将JavaBean序列化为JSON文本
publicstaticfinalString toJSONString(Object object,booleanprettyFormat);// 将JavaBean序列化为带格式的JSON文本
publicstaticfinalObject toJSON(Object javaObject); //将JavaBean转换为JSONObject或者JSONArray。

3、有关类库的一些说明

SerializeWriter:相当于StringBuffer
JSONArray:相当于List<Object>
JSONObject:相当于Map<String, Object>

JSON反序列化没有真正数组,本质类型都是List<Object>

4、fastjson还有很多很高级的特性,比如支持注解、支持全类型序列化,这些都是很好的特性,功能强大,不再讲解。

这是关于FastJson的一个使用Demo,在Java环境下验证的

  1. classUser{
  2. privateintid;
  3. privateStringname;
  4. publicintgetId(){
  5. returnid;
  6. }
  7. publicvoidsetId(intid){
  8. this.id=id;
  9. }
  10. publicStringgetName(){
  11. returnname;
  12. }
  13. publicvoidsetName(Stringname){
  14. this.name=name;
  15. }
  16. }
[java]view plaincopy
  1. importjava.util.ArrayList;
  2. importjava.util.List;
  3. classGroup{
  4. privateintid;
  5. privateStringname;
  6. privateList<User>list=newArrayList<User>();
  7. publicintgetId(){
  8. returnid;
  9. }
  10. publicvoidsetId(intid){
  11. this.id=id;
  12. }
  13. publicStringgetName(){
  14. returnname;
  15. }
  16. publicvoidsetName(Stringname){
  17. this.name=name;
  18. }
  19. publicList<User>getList(){
  20. returnlist;
  21. }
  22. publicvoidsetList(List<User>list){
  23. this.list=list;
  24. }
  25. }
[java]view plaincopy
  1. classWeibo{
  2. privateStringid;
  3. privateStringcity;
  4. publicWeibo(Stringid,Stringcity){
  5. this.id=id;
  6. this.city=city;
  7. }
  8. publicWeibo(){
  9. }
  10. publicStringgetId(){
  11. returnid;
  12. }
  13. publicvoidsetId(Stringid){
  14. this.id=id;
  15. }
  16. publicStringgetCity(){
  17. returncity;
  18. }
  19. publicvoidsetCity(Stringcity){
  20. this.city=city;
  21. }
  22. }
[java]view plaincopy
  1. importjava.util.HashMap;
  2. importjava.util.List;
  3. importjava.util.Map;
  4. importcom.alibaba.fastjson.JSON;
  5. importcom.alibaba.fastjson.JSONArray;
  6. importcom.alibaba.fastjson.JSONObject;
  7. /**
  8. *这是关于FastJson的一个使用Demo,在Java环境下验证的;
  9. *使用的时候可以参照这个例子进行回忆!
  10. *备注:下面写的Json格式的数据"前面的\,意思是告诉编译器忽略掉它后面的"。
  11. *后面定义有三个类:User、Group、Weibo
  12. *@authorliuzhao
  13. */
  14. publicclassJsonDemo{
  15. publicstaticvoidmain(String[]args){
  16. json2JsonObjectM1();//将Json文本数据信息转换为JsonObject对象,然后利用键值对的方式获取信息
  17. json2BeanM2();//将Json文本数据转换为JavaBean数据!
  18. json2JSONArrayM3();//将json数据转化为JSONArray:
  19. json2JavaBeanM4();//将JSON文本转换为JavaBean的集合;转换为单纯的1个Object:parseObject(Stringtext,Class<T>clazz);
  20. bean2JsonM5();//将JavaBean转换为Json格式的数据/Json文本用户数据的传递:例如上传服务器
  21. bean2JSONObjectM6();//将JavaBean转换为JSON对象
  22. complexExampleM7();//一个相对复杂的例子:
  23. complex2JsonM8();//一个复杂的Object到Json的Demo
  24. complexMap2JsonM9();//将Map数据转换为JsonString的Demo;这个对RedBoy服务端不就直接破了嘛!
  25. }
  26. /**
  27. *将Json文本数据信息转换为JsonObject对象,然后利用键值对的方式获取信息
  28. */
  29. privatestaticvoidjson2JsonObjectM1(){
  30. //一个JsonObject文本数据
  31. Strings="{\"name\":\"liuzhao\"}";
  32. //将JsonObject数据转换为Json
  33. JSONObjectobject=JSON.parseObject(s);
  34. //利用键值对的方式获取到值
  35. System.out.println(object.get("name"));
  36. /**
  37. *打印:
  38. *liuzhao
  39. */
  40. }
  41. /**
  42. *将Json文本数据转换为JavaBean数据!
  43. *需要注意的是:这时候的Json文本信息中的键的名称必须和JavaBean中的字段名称一样!键中没有的在这个JavaBean中就显示为null!
  44. */
  45. privatestaticvoidjson2BeanM2(){
  46. Strings="{\"id\":\"0375\",\"city\":\"平顶山\"}";
  47. //一个简单方便的方法将Json文本信息转换为JsonObject对象的同时转换为JavaBean对象!
  48. Weiboweibo=JSON.parseObject(s,Weibo.class);//Weibo类在下边定义
  49. System.out.println(weibo.getId());
  50. System.out.println(weibo.getCity());
  51. //打印的结果0375
  52. //平顶山
  53. }
  54. /**
  55. *将Map类型的数据转换为JsonString
  56. */
  57. privatestaticvoidcomplexMap2JsonM9(){
  58. Groupgroup=newGroup();
  59. group.setId(1);
  60. group.setName("group");
  61. Useruser1=newUser();
  62. user1.setId(2);
  63. user1.setName("user1");
  64. Useruser2=newUser();
  65. user2.setId(3);
  66. user2.setName("user2");
  67. group.getList().add(user1);
  68. group.getList().add(user2);
  69. Map<Integer,Object>map=newHashMap<Integer,Object>();
  70. map.put(1,"No.1");
  71. map.put(2,"No.2");
  72. map.put(3,group.getList());
  73. StringjsonString=JSON.toJSONString(map);
  74. System.out.println(jsonString);
  75. /**
  76. *输出:{1:"No.1",2:"No.2",3:[{"id":2,"name":"user1"},{"id":3,"name":"user2"}]}
  77. */
  78. }
  79. /**
  80. *由一个复杂的Object到Json的Demo
  81. */
  82. privatestaticvoidcomplex2JsonM8(){
  83. Groupgroup=newGroup();
  84. group.setId(1);
  85. group.setName("group");
  86. Useruser1=newUser();
  87. user1.setId(2);
  88. user1.setName("user1");
  89. Useruser2=newUser();
  90. user2.setId(3);
  91. user2.setName("user2");
  92. group.getList().add(user1);
  93. group.getList().add(user2);
  94. StringjsonString=JSON.toJSONString(group);
  95. System.out.println(jsonString);
  96. /**
  97. *输出:{"id":1,"list":[{"id":2,"name":"user1"},{"id":3,"name":"user2"}],"name":"group"}
  98. */
  99. }
  100. /**
  101. *一个相对复杂的例子:
  102. *JSON文本数据:
  103. *首先是JSONObject,转换为JSONArray;
  104. *然后将JSONArray转换为JavaBean
  105. */
  106. privatestaticvoidcomplexExampleM7(){
  107. Strings="{js:[{id:\"110000\",\"city\":\"北#001京市\"},{id:\"110000\",\"city\":\"北#002京市\"}"
  108. +",{id:\"110000\",\"city\":\"北#002京市\"},{id:\"110000\",\"city\":\"北#002京市\"},"
  109. +"{id:\"110000\",\"city\":\"#006北#005京市\"},"
  110. +"{id:\"110000\",\"city\":\"北#002京市\"},"
  111. +"{id:\"110000\",\"city\":\"北#002京市\"},{id:\"120000\",\"city\":\"天#009津市\"}]}";
  112. JSONObjectobject=JSON.parseObject(s);
  113. ObjectjsonArray=object.get("js");
  114. System.out.println(jsonArray);
  115. List<Weibo>list=JSON.parseArray(jsonArray+"",Weibo.class);
  116. for(Weiboweibo:list){
  117. System.out.println(weibo.getCity());
  118. }
  119. }
  120. /**
  121. *将JavaBean转换为JSON对象
  122. */
  123. privatestaticvoidbean2JSONObjectM6(){
  124. Weiboweibo=newWeibo("0373","洛阳");
  125. JSONObjectjson=(JSONObject)JSON.toJSON(weibo);
  126. System.out.println(json.get("id"));
  127. /**
  128. *打印:
  129. *0373
  130. */
  131. }
  132. /**
  133. *将JSON文本转换为JavaBean的集合;
  134. *内部实现肯定是:首先转换为JSONArray,然后再转换为List集合
  135. */
  136. privatestaticvoidjson2JavaBeanM4(){
  137. Strings="[{\"id\":\"0375\",\"city\":\"平顶山\"},{\"id\":\"0377\",\"city\":\"南阳\"}]";
  138. List<Weibo>list=JSON.parseArray(s,Weibo.class);
  139. for(Weiboweibo:list){
  140. System.out.println(weibo.getCity());
  141. }
  142. /**
  143. *打印:
  144. *平顶山
  145. *南阳
  146. */
  147. }
  148. /**
  149. *将json数据转化为JSONArray:
  150. *注意:获取到JSONArray之后(我们这里只是获取到JSONArray而不是JavaBean的List集合)
  151. *获取JSONArray中的数据转换为String类型需要在外边加"";
  152. */
  153. privatestaticvoidjson2JSONArrayM3(){
  154. Strings="[{\"id\":\"0375\",\"city\":\"平顶山\"},{\"id\":\"0377\",\"city\":\"南阳\"}]";
  155. //将JSON文本转换为JSONArray
  156. JSONArrayarray=JSON.parseArray(s);
  157. //这行必须写:必须加上+"";不然会报出类型强转异常!
  158. Stringstr=array.get(1)+"";
  159. System.out.println(array.get(0));
  160. JSONObjectobject=JSON.parseObject(str);
  161. System.out.println(object.get("id"));
  162. /**
  163. *{"city":"平顶山","id":"0375"}
  164. 0377
  165. */
  166. }
  167. /**
  168. *将JavaBean转换为Json格式的数据/Json文本
  169. *用户数据的传递:例如上传服务器
  170. */
  171. privatestaticvoidbean2JsonM5(){
  172. Weiboweibo=newWeibo("123456","上海");
  173. Stringstring=JSON.toJSONString(weibo);
  174. System.out.println(string);
  175. /**
  176. *打印:
  177. *{"city":"上海","id":"123456"}
  178. */
  179. }
  180. }
优质内容筛选与推荐>>
1、Android实现播放器功能
2、silverlight---游戏中的人工智能之追逐与闪躲
3、【bzoj3456】 城市规划
4、redis主从复制
5、HDU1060


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn