FastJSON 应用前测试

FastJSON是一个很好的java开源json工具类库,相比其他同类的json类库,它的速度的确是fast,最快!但是文档做得不好,在应用前不得不亲测一些功能。\

实际上其他的json处理工具都和它差不多,api也有几分相似。

一、JSON规范
JSON是一个标准规范,用于数据交互,规范的中文文档如下:
参看规范,来对比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
2、主要的使用入口
Fastjson API入口类是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON类上的静态方法直接完成。
  1. public static final Object parse(String text); // 把JSON文本parse为JSONObject或者JSONArray
  2. public static final JSONObject parseObject(String text); // 把JSON文本parse成JSONObject
  3. public static final <T> T parseObject(String text, Class<T> clazz); // 把JSON文本parse为JavaBean
  4. public static final JSONArray parseArray(String text); // 把JSON文本parse成JSONArray
  5. public static final <T> List<T> parseArray(String text, Class<T> clazz); //把JSON文本parse成JavaBean集合
  6. public static final String toJSONString(Object object); // 将JavaBean序列化为JSON文本
  7. public static final String toJSONString(Object object, boolean prettyFormat); // 将JavaBean序列化为带格式的JSON文本
  8. 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还有很多很高级的特性,比如支持注解、支持全类型序列化,这些都是很好的特性,功能强大,不在本次测试范围。
三、测试代码
  1. package lavasoft.stu.json;
  2.  
  3. import com.alibaba.fastjson.JSON;
  4. import com.alibaba.fastjson.serializer.SerializeConfig;
  5. import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;
  6.  
  7. import java.util.*;
  8.  
  9. /**
  10. * Created by IntelliJ IDEA.
  11. *
  12. * @author leizhimin 11-11-22 上午9:15
  13. */
  14. public class Foo {
  15. private String vString = "vStringhehhehe";
  16. private char vchar = 'x';
  17.  
  18. private byte vbyte = ;
  19. private short vshort = ;
  20. private int vint = ;
  21. private long vlong = 9999999L;
  22.  
  23. private float vfloat = 12.1f;
  24. private double vdouble = 22.203d;
  25.  
  26. private boolean vboolean = false;
  27.  
  28. // private Date vdate = new Date();
  29. private Date dddd = new Date();
  30. private Date vDate = new Date();
  31. private Date v_Date = new Date();
  32. private Object vnull = null;
  33.  
  34. private String[] avString = {"aaa", "bbb", "ccc"};
  35. private int[] avint = {, , , };
  36. private boolean[] avboolean = {true, false, true, true};
  37.  
  38. private List<String> listString = new ArrayList<String>();
  39. private Map<String, String> map = new HashMap<String, String>();
  40.  
  41. private Bar bar = new Bar();
  42. private Bar[] avBar = {new Bar(), new Bar()};
  43. private List<Bar> listBar = new ArrayList<Bar>();
  44.  
  45. {
  46. listString.add("listString1");
  47. listString.add("listString2");
  48. listString.add("listString3");
  49.  
  50. map.put("x", "s11111x");
  51. map.put("y", "s22222y");
  52. map.put("z", "s33333z");
  53.  
  54. listBar.add(new Bar());
  55. listBar.add(new Bar());
  56. listBar.add(new Bar());
  57. }
  58.  
  59. public String getvString() {
  60. return vString;
  61. }
  62.  
  63. public void setvString(String vString) {
  64. this.vString = vString;
  65. }
  66.  
  67. public char getVchar() {
  68. return vchar;
  69. }
  70.  
  71. public void setVchar(char vchar) {
  72. this.vchar = vchar;
  73. }
  74.  
  75. public byte getVbyte() {
  76. return vbyte;
  77. }
  78.  
  79. public void setVbyte(byte vbyte) {
  80. this.vbyte = vbyte;
  81. }
  82.  
  83. public short getVshort() {
  84. return vshort;
  85. }
  86.  
  87. public void setVshort(short vshort) {
  88. this.vshort = vshort;
  89. }
  90.  
  91. public int getVint() {
  92. return vint;
  93. }
  94.  
  95. public void setVint(int vint) {
  96. this.vint = vint;
  97. }
  98.  
  99. public long getVlong() {
  100. return vlong;
  101. }
  102.  
  103. public void setVlong(long vlong) {
  104. this.vlong = vlong;
  105. }
  106.  
  107. public float getVfloat() {
  108. return vfloat;
  109. }
  110.  
  111. public void setVfloat(float vfloat) {
  112. this.vfloat = vfloat;
  113. }
  114.  
  115. public double getVdouble() {
  116. return vdouble;
  117. }
  118.  
  119. public void setVdouble(double vdouble) {
  120. this.vdouble = vdouble;
  121. }
  122.  
  123. public boolean isVboolean() {
  124. return vboolean;
  125. }
  126.  
  127. public void setVboolean(boolean vboolean) {
  128. this.vboolean = vboolean;
  129. }
  130.  
  131. public Date getDddd() {
  132. return dddd;
  133. }
  134.  
  135. public void setDddd(Date dddd) {
  136. this.dddd = dddd;
  137. }
  138.  
  139. public Date getV_Date() {
  140. return v_Date;
  141. }
  142.  
  143. public void setV_Date(Date v_Date) {
  144. this.v_Date = v_Date;
  145. }
  146.  
  147. public Date getvDate() {
  148. return vDate;
  149. }
  150.  
  151. public void setvDate(Date vDate) {
  152. this.vDate = vDate;
  153. }
  154.  
  155. public Object getVnull() {
  156. return vnull;
  157. }
  158.  
  159. public void setVnull(Object vnull) {
  160. this.vnull = vnull;
  161. }
  162.  
  163. public String[] getAvString() {
  164. return avString;
  165. }
  166.  
  167. public void setAvString(String[] avString) {
  168. this.avString = avString;
  169. }
  170.  
  171. public int[] getAvint() {
  172. return avint;
  173. }
  174.  
  175. public void setAvint(int[] avint) {
  176. this.avint = avint;
  177. }
  178.  
  179. public boolean[] getAvboolean() {
  180. return avboolean;
  181. }
  182.  
  183. public void setAvboolean(boolean[] avboolean) {
  184. this.avboolean = avboolean;
  185. }
  186.  
  187. public List<String> getListString() {
  188. return listString;
  189. }
  190.  
  191. public void setListString(List<String> listString) {
  192. this.listString = listString;
  193. }
  194.  
  195. public Map<String, String> getMap() {
  196. return map;
  197. }
  198.  
  199. public void setMap(Map<String, String> map) {
  200. this.map = map;
  201. }
  202.  
  203. public Bar getBar() {
  204. return bar;
  205. }
  206.  
  207. public void setBar(Bar bar) {
  208. this.bar = bar;
  209. }
  210.  
  211. public Bar[] getAvBar() {
  212. return avBar;
  213. }
  214.  
  215. public void setAvBar(Bar[] avBar) {
  216. this.avBar = avBar;
  217. }
  218.  
  219. public List<Bar> getListBar() {
  220. return listBar;
  221. }
  222.  
  223. public void setListBar(List<Bar> listBar) {
  224. this.listBar = listBar;
  225. }
  226. }
  1. package lavasoft.stu.json;
  2.  
  3. import com.alibaba.fastjson.JSON;
  4. import com.alibaba.fastjson.serializer.SerializeConfig;
  5. import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;
  6.  
  7. import java.util.Date;
  8. import java.util.Random;
  9.  
  10. /**
  11. * Created by IntelliJ IDEA.
  12. *
  13. * @author leizhimin 11-11-22 上午9:15
  14. */
  15. public class Bar {
  16. public static SerializeConfig mapping = new SerializeConfig();
  17. private String barName;
  18. private int barAge;
  19. private Date barDate = new Date();
  20. static {
  21. mapping.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd"));
  22. }
  23. {
  24. Random r = new Random();
  25. barName = "sss_"+String.valueOf(r.nextFloat());
  26. barAge = r.nextInt();
  27. }
  28.  
  29. public static void main(String[] args) {
  30. Object obj = JSON.toJSON(new Bar());
  31. String x1 = JSON.toJSONString(new Bar(), true);
  32. System.out.println(x1);
  33. String x2 = JSON.toJSONString(new Bar(), mapping);
  34. System.out.println(x2);
  35. }
  36.  
  37. public String getBarName() {
  38. return barName;
  39. }
  40.  
  41. public void setBarName(String barName) {
  42. this.barName = barName;
  43. }
  44.  
  45. public int getBarAge() {
  46. return barAge;
  47. }
  48.  
  49. public void setBarAge(int barAge) {
  50. this.barAge = barAge;
  51. }
  52.  
  53. public Date getBarDate() {
  54. return barDate;
  55. }
  56.  
  57. public void setBarDate(Date barDate) {
  58. this.barDate = barDate;
  59. }
  60.  
  61. @Override
  62. public String toString() {
  63. return "Bar{" +
  64. "barName='" + barName + '\'' +
  65. ", barAge=" + barAge +
  66. ", barDate=" + barDate +
  67. '}';
  68. }
  69. }
  1. package lavasoft.stu.json;
  2.  
  3. import com.alibaba.fastjson.JSON;
  4. import com.alibaba.fastjson.JSONArray;
  5. import com.alibaba.fastjson.serializer.SerializeConfig;
  6. import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;
  7.  
  8. import java.util.*;
  9.  
  10. /**
  11. * Created by 2IntelliJ IDEA.
  12. *
  13. * @author leizhimin 11-11-22 上午9:45
  14. */
  15. public class Test {
  16. private static SerializeConfig mapping = new SerializeConfig(); static {
  17. mapping.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd HH:mm:ss"));
  18. }
  19.  
  20. public static void main(String[] args) {
  21. Foo f1 = new Foo();
  22. Date date = new Date();
  23. String text = JSON.toJSONString(date, mapping);
  24. System.out.println(text);
  25. System.out.println(JSON.toJSONString(f1, true));
  26. String x2 =JSON.toJSONString(f1, mapping);
  27. System.out.println(x2);
  28. }
  29.  
  30. public static void json2List(){
  31. //List -> JSON array
  32. List<Bar> barList = new ArrayList<Bar>();
  33. barList.add(new Bar());
  34. barList.add(new Bar());
  35. barList.add(new Bar());
  36. String json= JSON.toJSONString(barList, true);
  37. System.out.println(json);
  38. //JSON array -> List
  39. List<Bar> barList1 = JSON.parseArray(json,Bar.class);
  40. for (Bar bar : barList1) {
  41. System.out.println(bar.toString());
  42. }
  43. }
  44.  
  45. public static void json2Map(){
  46. //Map -> JSON
  47. Map<String,Bar> map = new HashMap<String, Bar>();
  48. map.put("a",new Bar());
  49. map.put("b",new Bar());
  50. map.put("c",new Bar());
  51. String json = JSON.toJSONString(map,true);
  52. System.out.println(json);
  53. //JSON -> Map
  54. Map<String,Bar> map1 = (Map<String,Bar>)JSON.parse(json);
  55. for (String key : map1.keySet()) {
  56. System.out.println(key+":"+map1.get(key));
  57. }
  58. }
  59.  
  60. public static void array2JSON(){
  61. String[] arr_String = {"a","b","c"};
  62. String json_arr_String = JSON.toJSONString(arr_String,true);
  63. System.out.println(json_arr_String);
  64. JSONArray jsonArray = JSON.parseArray(json_arr_String);
  65. for (Object o : jsonArray) {
  66. System.out.println(o);
  67. }
  68. System.out.println(jsonArray);
  69. }
  70. public static void array2JSON2(){
  71. Bar[] arr_Bar = {new Bar(),new Bar(),new Bar()};
  72. String json_arr_Bar = JSON.toJSONString(arr_Bar,true);
  73. System.out.println(json_arr_Bar);
  74. JSONArray jsonArray = JSON.parseArray(json_arr_Bar);
  75. for (Object o : jsonArray) {
  76. System.out.println(o);
  77. }
  78. System.out.println(jsonArray);
  79. }
  80.  
  81. public static void map2JSON(){
  82. Map map = new HashMap();
  83. map.put("a","aaa");
  84. map.put("b","bbb");
  85. map.put("c","ccc");
  86. String json=JSON.toJSONString(map);
  87. System.out.println(json);
  88. Map map1 = JSON.parseObject(json);
  89. for (Object o : map.entrySet()) {
  90. Map.Entry<String,String> entry = (Map.Entry<String,String>)o;
  91. System.out.println(entry.getKey()+"--->"+entry.getValue());
  92. }
  93. }
  94. }
说明:
SerializeConfig:是对序列化过程中一些序列化过程的特殊配置,这里用作日期格式的定义。
有关需要带类型的全类型序列化过程,需要调用JSON.toJSONStringZ()方法。
需要美化输出时候,需要打开序列化美化开关,在方法中true那个参数。
输出结果:
  1. "2011-11-23 23:30:33"
  2. {
  3. "avBar":[{
  4. "barAge":,
  5. "barDate":,
  6. "barName":"sss_0.62378174"
  7. },{
  8. "barAge":,
  9. "barDate":,
  10. "barName":"sss_0.36014742"
  11. }],
  12. "avString":["aaa","bbb","ccc"],
  13. "avboolean":[true,false,true,true],
  14. "avint":[,,,],
  15. "bar":{
  16. "barAge":,
  17. "barDate":,
  18. "barName":"sss_0.46644872"
  19. },
  20. "dddd":,
  21. "listBar":[
  22. {
  23. "barAge":-,
  24. "barDate":,
  25. "barName":"sss_0.83562374"
  26. },
  27. {
  28. "barAge":,
  29. "barDate":,
  30. "barName":"sss_0.59483266"
  31. },
  32. {
  33. "barAge":,
  34. "barDate":,
  35. "barName":"sss_0.9961642"
  36. }
  37. ],
  38. "listString":[
  39. "listString1",
  40. "listString2",
  41. "listString3"
  42. ],
  43. "map":{"x":"s11111x","y":"s22222y","z":"s33333z"},
  44. "v_Date":,
  45. "vboolean":false,
  46. "vbyte":,
  47. "vchar":"x",
  48. "vdouble":22.203,
  49. "vfloat":12.1,
  50. "vint":,
  51. "vlong":,
  52. "vshort":
  53. }
  54. {"avBar":[{"barAge":,"barDate":"2011-11-23 23:30:33","barName":"sss_0.62378174"},{"barAge":,"barDate":"2011-11-23 23:30:33","barName":"sss_0.36014742"}],"avString":["aaa","bbb","ccc"],"avboolean":[true,false,true,true],"avint":[,,,],"bar":{"barAge":,"barDate":"2011-11-23 23:30:33","barName":"sss_0.46644872"},"dddd":"2011-11-23 23:30:33","listBar":[{"barAge":-,"barDate":"2011-11-23 23:30:33","barName":"sss_0.83562374"},{"barAge":,"barDate":"2011-11-23 23:30:33","barName":"sss_0.59483266"},{"barAge":,"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":,"vchar":"x","vdouble":22.203,"vfloat":12.1,"vint":,"vlong":,"vshort":}
  55.  
  56. Process finished with exit code
fastjson通过各方面测试都很好,功能性能都是No.1,喜欢,它的源代码质量很高,作者也煞费苦心,将性能做到了最好,全免超越其他的json类库。
从其中的源代码中,可以学到很多东西,在阅读源码后,不得不佩服作者高超的程序设计水平,和高质量的编码。
 
感谢alibaba对此工具开源。
fastjson-1.1.10-sources.jar
 
由于fastjson缺乏良好的api文档,在阅读源码过程中,参考了网上一些文档:
 

FastJSON应用前测试的更多相关文章

  1. FastJSON应用前测试--转载

    FastJSON 应用前测试   FastJSON是一个很好的java开源json工具类库,相比其他同类的json类库,它的速度的确是fast,最快!但是文档做得不好,在应用前不得不亲测一些功能.   ...

  2. IOS AppStore上线前测试

    IOS  AppStore上线前测试 TestFlight Beta ios 8才开始支持. https://developer.apple.com/library/ios/documentation ...

  3. 上线前测试的bug,要不要处理,跟版本的关系

    最近有两个项目是在旧版本上实施的.上线前经过一轮测试后,发现了一些产品(我们的产品确实不稳定) 在这个项目上,修改产品bug是肯定的.但是要不要追踪这些bug? 这就跟版本使用范围有关系了,毕竟要考虑 ...

  4. 学生选课系统(Java语言期末前测试)

      测试具体要求: 2.系统要求与功能设计 2.1 页面要求 (1)能够在Tomcat服务器中正确部署,并通过浏览器查看: (2)网站页面整体风格统一: (3)首页(登录页)要求实现不同用户登录后,进 ...

  5. 2017 6 2php用PDO链接数据库前测试

    try { $dsn = "mysql:dbname=test;host=127.0.0.1";//链接mysql的DSN(数据库驱动) $user = 'root';//Mysq ...

  6. FastJSON 简介及其Map/JSON/String 互转

    在日志解析,前后端数据传输交互中,经常会遇到 String 与 map.json.xml 等格式相互转换与解析的场景,其中 json 基本成为了跨语言.跨前后端的事实上的标准数据交互格式.应该来说各个 ...

  7. 关于xcode6打包以及上线前企业部署测试的说明 --转自张诚教授微博

    xcode6如何打包 首先clean然后点击归档 点击打包之后保存 点选第一个以后检查相关证书签名 那么我们开发完以后,在上线前如何给别人测试 有2种方法 1.使用299美金的企业开发者账号搭建企业部 ...

  8. maven 打包前 Junit 测试

    1. 在需要打包前测试的项目中添加依赖 <dependency> <groupId>junit</groupId> <artifactId>junit& ...

  9. [转]fastjson

    原文地址:http://www.cnblogs.com/zhenmingliu/archive/2011/12/29/2305775.html FastJSON是一个很好的java开源json工具类库 ...

随机推荐

  1. php 函数之 )_each()list()implode()explode()in_array()

    <?php /* implode() 把数组组合成字符串 explode() 把字符串分割成数组 in_array() 检测内容是否在数组中 each()把数组元素拆分成新的数组 list() ...

  2. 不同分辨率下获取不同js文件

    获取当前网站的目录  //js获取网站根路径(站点及虚拟目录),获得网站的根目录或虚拟目录的根地址 function getRootPath(){ //整个域名(如:http://vc3.cn/ind ...

  3. Child Process

    Child Process child_process 这个模块可以生成一个子进程.nodejs提供了好几个API,本质上都是调用child_process.spawn(): const spawn ...

  4. Oracle EBS-SQL (INV-6):检查监督帐户别名处理.sql

    select MSI.SEGMENT1                                 项目编码,       MSI.DESCRIPTION                      ...

  5. QTextEdit中选中文本修改字体与颜色,全部文本修改字体与颜色(设置调色板的前景色、背景色、文字颜色以及基色)

    ----我的生活,我的点点滴滴!! 当然以下内容都可以通过设置样式来达到目的,但是下面不使用这样的方法 先来看张图,理解此图基本就能实现上面所要达到的目的了 Widget::Widget(QWidge ...

  6. C# 导出CSV功能记录下

    异常问题1: 如 机构编号 导出城CSV后,前面的四个0000不显示了, 解决办法 输出格式变为 =" 异常问题2: PPMABAT01:/MABATAPS/usr/ma_batas > ...

  7. UML_行为图

    活动图是UML用于对系统的动态行为建模的另一种常用工具,它描述活动的顺序,展现从一个活动到另一个活动的控制流.活动图在本质上是一种流程图.活动图着重表现从一个活动到另一个活动的控制流,是内部处理驱动的 ...

  8. react-native 自己搭建热更新服务器

    使用到的框架是 react-native-update react-native-update-cli 这个应该执行热更新的时候的终端命令. 通过这个,自己搭建一个热更新的服务器.

  9. SQL SERVER分区视图

    借助SQL SERVER分区视图,可以对SQL中的表进行集中管理,下文将以实例的方式为您详解SQL SERVER分区视图,希望对您学习SQL数据库能有所帮助. SQL SERVER分区视图给我们提供了 ...

  10. iOS各种类

    http://www.isenhao.com/xueke/jisuanji/bcyy/objc.php http://www.code4app.com 这网站不错,收集各种 iOS App 开发可以用 ...