阿里巴巴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类上的静态方法直接完成。

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:相当于StringBuffer
JSONArray:相当于List<Object>
JSONObject:相当于Map<String, Object>

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

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

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

  1. class User{
  2. private int id;
  3. private String name;
  4. public int getId() {
  5. return id;
  6. }
  7. public void setId(int id) {
  8. this.id = id;
  9. }
  10. public String getName() {
  11. return name;
  12. }
  13. public void setName(String name) {
  14. this.name = name;
  15. }
  16. }

[java] view plain copy

  1. import java.util.ArrayList;
  2. import java.util.List;
  3. class Group{
  4. private int id;
  5. private String name;
  6. private List<User> list = new ArrayList<User>();
  7. public int getId() {
  8. return id;
  9. }
  10. public void setId(int id) {
  11. this.id = id;
  12. }
  13. public String getName() {
  14. return name;
  15. }
  16. public void setName(String name) {
  17. this.name = name;
  18. }
  19. public List<User> getList() {
  20. return list;
  21. }
  22. public void setList(List<User> list) {
  23. this.list = list;
  24. }
  25. }

[java] view plain copy

  1. class Weibo {
  2. private String id;
  3. private String city;
  4. public Weibo(String id, String city) {
  5. this.id = id;
  6. this.city = city;
  7. }
  8. public Weibo() {
  9. }
  10. public String getId() {
  11. return id;
  12. }
  13. public void setId(String id) {
  14. this.id = id;
  15. }
  16. public String getCity() {
  17. return city;
  18. }
  19. public void setCity(String city) {
  20. this.city = city;
  21. }
  22. }

[java] view plain copy

  1. import java.util.HashMap;
  2. import java.util.List;
  3. import java.util.Map;
  4. import com.alibaba.fastjson.JSON;
  5. import com.alibaba.fastjson.JSONArray;
  6. import com.alibaba.fastjson.JSONObject;
  7. /**
  8. * 这是关于FastJson的一个使用Demo,在Java环境下验证的;
  9. * 使用的时候可以参照这个例子进行回忆!
  10. * 备注:下面写的Json格式的数据"前面的\,意思是告诉编译器忽略掉它后面的"。
  11. * 后面定义有三个类:User、Group、Weibo
  12. * @author liuzhao
  13. */
  14. public class JsonDemo {
  15. public static void main(String[] args) {
  16. json2JsonObjectM1();//将Json文本数据信息转换为JsonObject对象,然后利用键值对的方式获取信息
  17. json2BeanM2();//将Json文本数据转换为JavaBean数据!
  18. json2JSONArrayM3();//将json数据转化为JSONArray:
  19. json2JavaBeanM4();//将JSON文本转换为JavaBean的集合;转换为单纯的1个Object:parseObject(String text, 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. private static void json2JsonObjectM1() {
  30. //一个JsonObject文本数据
  31. String s = "{\"name\":\"liuzhao\"}";
  32. //将JsonObject数据转换为Json
  33. JSONObject object = 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. private static void json2BeanM2() {
  46. String s = "{\"id\":\"0375\",\"city\":\"平顶山\"}";
  47. //一个简单方便 的方法将Json文本信息转换为JsonObject对象的同时转换为JavaBean对象!
  48. Weibo weibo = 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. private static void complexMap2JsonM9() {
  58. Group group = new Group();
  59. group.setId(1);
  60. group.setName("group");
  61. User user1 = new User();
  62. user1.setId(2);
  63. user1.setName("user1");
  64. User user2 = new User();
  65. user2.setId(3);
  66. user2.setName("user2");
  67. group.getList().add(user1);
  68. group.getList().add(user2);
  69. Map<Integer, Object> map = new HashMap<Integer,Object>();
  70. map.put(1, "No.1");
  71. map.put(2, "No.2");
  72. map.put(3, group.getList());
  73. String jsonString = 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. private static void complex2JsonM8() {
  83. Group group = new Group();
  84. group.setId(1);
  85. group.setName("group");
  86. User user1 = new User();
  87. user1.setId(2);
  88. user1.setName("user1");
  89. User user2 = new User();
  90. user2.setId(3);
  91. user2.setName("user2");
  92. group.getList().add(user1);
  93. group.getList().add(user2);
  94. String jsonString = 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. private static void complexExampleM7() {
  107. String s = "{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. JSONObject object = JSON.parseObject(s);
  113. Object jsonArray = object.get("js");
  114. System.out.println(jsonArray);
  115. List<Weibo> list = JSON.parseArray(jsonArray+"", Weibo.class);
  116. for (Weibo weibo : list) {
  117. System.out.println(weibo.getCity());
  118. }
  119. }
  120. /**
  121. * 将JavaBean转换为JSON对象
  122. */
  123. private static void bean2JSONObjectM6() {
  124. Weibo weibo = new Weibo("0373", "洛阳");
  125. JSONObject json = (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. private static void json2JavaBeanM4() {
  137. String s = "[{\"id\":\"0375\",\"city\":\"平顶山\"},{\"id\":\"0377\",\"city\":\"南阳\"}]";
  138. List<Weibo> list = JSON.parseArray(s, Weibo.class);
  139. for (Weibo weibo : 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. private static void json2JSONArrayM3() {
  154. String s = "[{\"id\":\"0375\",\"city\":\"平顶山\"},{\"id\":\"0377\",\"city\":\"南阳\"}]";
  155. //将JSON文本转换为JSONArray
  156. JSONArray array = JSON.parseArray(s);
  157. //这行必须写:必须加上+"";不然会报出类型强转异常!
  158. String str = array.get(1)+"";
  159. System.out.println(array.get(0));
  160. JSONObject object = 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. private static void bean2JsonM5() {
  172. Weibo weibo = new Weibo("123456", "上海");
  173. String string = JSON.toJSONString(weibo);
  174. System.out.println(string);
  175. /**
  176. * 打印:
  177. * {"city":"上海","id":"123456"}
  178. */
  179. }
  180. }
时间: 2024-11-05 13:29:56

阿里巴巴Json工具-Fastjson讲解的相关文章

JSON工具学习记录--FastJSON

最近做项目,总是与json打交道,在用了即可json工具后,个人认为fastJson最好用,很方便,API也清晰可见,所以记录下使用方法,给需要的人提供帮助.(部分摘抄自网络) 一.API入口 Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成. public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArr

JSON工具学习记录--FastJSON循环引用问题

JSON工具学习记录–FastJSON循环引用问题 标签(空格分隔): fastjson 最近基于他人项目做二次开发,遇到了循环引用的问题,简单来说A引用了B,B引用了C,C引用了A,那么转换json就会无休止的转换下去. 更复杂的情况,A中引用了B,B中引用了一个A的集合,比如广告引用了广告类型,广告类型里面又有该类型下的所属广告. 1.构造情景 这种又叫做双向引用,个人感觉这种设计本身就不是很合理,当然还要看具体使用场景了. 广告类: /** * @author Niu Li * @date

JSON工具类库: alibaba/fastjson 使用记录

JSON工具类库: alibaba/fastjson 使用记录 一.了解JSON JSON标准规范中文文档: http://www.json.org/json-zh.html 最佳实践:http://kimmking.github.io/2017/06/06/json-best-practice/ (JSON的高级使用,特别十分有参考价值) 二.项目地址和Wiki: Git地址: https://github.com/alibaba/fastjson Wiki:https://github.co

Java中常用的JSON工具

1.Java中常用的JSON工具 Gson: 谷歌开发的 JSON 库,功能十分全面. FastJson: 阿里巴巴开发的 JSON 库,性能十分优秀. Jackson: 社区十分活跃且更新速度很快. 2.以下教程基于 FastJson 讲解. 在 Maven 构建的项目中,在 pom.xml 文件中加入以下依赖即可. <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</a

Json工具类库之Gson实战笔记

日常接口的数据传输通常使用xml或者json来传递数据,xml较庞大但是描述数据能力十分出众,json数据结构较小而且支持ajax传输,xml在数据传输和解析资源占用都比较逊色于json.因此日常的接口通常都使用json的数据格式进行传输.一方面能减少应用或者客户端如Android应用解析数据的资源占用,另一方面节省宝贵的数据传输时间. Java中对Json的序列化和反序列化常用的工具有Json.Fastjson.Gson等.其中,Fastjson是阿里巴巴的开源产品,用Java语言实现,号称是

JSON之FastJson

FastJson是什么? 从网上查到--- 官网地址:http://code.alibabatech.com/wiki/display/FastJSON/Overview(已关闭) FastJSOn是阿里巴巴开源的JSON处理工具,包括“序列化”和“反序列化”两部分,它具备如下特征: 速度最快,测试表明,fastjson具有极快的性能,超越任其他的java json parser.包括自称最快的jackson. 功能强大,完全支持java bean.集合.Map.日期.Enum,支持范型,支持自

(转)JSON 之FastJson解析

一.阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser.包括自称最快的JackJson:功能强大,完全支持Java Bean.集合.Map.日期.Enum,支持范型,支持自省:无依赖,能够直接运行在Java SE 5.0以上版本:支持Android:开源 (Apache 2.0) Fastjson API入口类是com.alibaba.fastjso

阿里的json处理--fastjson

import java.util.HashMap; import java.util.List; import java.util.Map; import com.alibaba.fastjson.JSON; /**  * json工具  */ public class JsonUtil {            /**       * 对象转 json       */      public static String toJson( Object o ){            retur

react.js 之 create-react-app 命令行工具系统讲解

react.js 教程之 create-react-app 命令行工具系统讲解 快速开始 npm install -g create-react-app create-react-app my-app cd my-app/ npm start 通过http://localhost:3000/查看你的app 使用 npm run build 编译打包程序 npm test 文件修改后测试,这部分内容后面讲 更新到最新版本 创建react app的主要分为两个包,一个包是create-react-a