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类上的静态方法直接完成。
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还有很多很高级的特性,比如支持注解、支持全类型序列化,这些都是很好的特性,功能强大,不在本次测试范围。
 
三、测试代码
 
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类库。
从其中的源代码中,可以学到很多东西,在阅读源码后,不得不佩服作者高超的程序设计水平,和高质量的编码。

fastJson API的更多相关文章

  1. FastJson一些常见方法(API):处理JSON变得好简单

    fastjson是目前java语言中最快的json库,比自称最快的jackson速度要快,第三方独立测试结果说明比gson快大约6倍 JSON帮助类 这个可以做一个实例研究代码,也可以作为一个工具类 ...

  2. Java的Json解析包FastJson使用

    阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser. ...

  3. [转]fastjson

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

  4. alibaba的FastJson(高性能JSON开发包),fastjson 使用demo

    这是关于FastJson的一个使用Demo,在Java环境下验证的 class User{ private int id; private String name; public int getId( ...

  5. 阿里巴巴Json工具-Fastjson讲解

    Fastjson是阿里巴巴公司开源的速度最快的Json和对象转换工具,一个Java语言编写的JSON处理器. 1.遵循http://json.org标准,为其官方网站收录的参考实现之一.2.功能qia ...

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

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

  7. alibaba的FastJson(高性能JSON开发包)

    这是关于FastJson的一个使用Demo,在Java环境下验证的 class User{ private int id; private String name; public int getId( ...

  8. FastJson的基本用法----转

    1. [文件] User.java ~ 243B   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class User{     private int id;    ...

  9. Android进阶笔记17:3种JSON解析工具(org.json、fastjson、gson)

    一. 目前解析json有三种工具:org.json(Java常用的解析),fastjson(阿里巴巴工程师开发的),Gson(Google官网出的),其中解析速度最快的是Gson. 3种json工具下 ...

随机推荐

  1. stm32中的数据类型定义

    STM32F10X.H #include "core_cm3.h" #include "system_stm32f10x.h" #include <std ...

  2. unity,set ugui rectTransform anchor by script

    如果想用代码实现与下面面板相同的功能 试验可知改变上面选项下面四个值也随之变化: 所以说明二者是一回事儿. 因此,只要通过代码修改RectTransform的anchorMax和anchorMin成员 ...

  3. Codeforces 455C Civilization(并查集+dfs)

    题目链接:Codeforces 455C Civilization 题目大意:给定N.M和Q,N表示有N个城市,M条已经修好的路,修好的路是不能改变的.然后是Q次操作.操作分为两种.一种是查询城市x所 ...

  4. CentOS6.x修改主机名,关闭防火墙

    一.centos默认主机名为localhost,不方便管理,此次,我修改为noi. 1.修改网络配置文件:/etc/sysconfig/network 首先,备份一下源文件,注意date命令和加号之间 ...

  5. atitit.atiOrm.js v2 q61 版本新特性.docx

    atitit.atiOrm.js v2 q61 版本新特性.docx 1. V1新特性如下1 1.1. V2规划,直接生成sql在js端1 2. Orm设计框架图1 2.1. atiOrm.js的原理 ...

  6. POJ 2409 Let it Bead(Polya简单应用)

    Let it Bead 大意:给你m种颜色,n个珠子串起来.旋转跟反转同样算同样,问有多少种不同的涂色组合方式. 思路:Polya的简单应用. /*************************** ...

  7. twemproxy源码分析2——守护进程的创建

    twemproxy源码中关于守护进程的创建实现得比较标准,先贴出代码来,然后结合一些资料来分析和列举一些实现守护进程的常用方法,不过不得不说twemproxy的实现确实是不错的,注释都写在了代码中,直 ...

  8. Apache: You don't have permission to access / on this server

    当我们需要使用Apache配置虚拟主机时,有可能会出现这个问题:Apache: You don't have permission to access / on this server # 同IP不同 ...

  9. vim插件管理器的安装和配置-windows

    # vim插件管理器的安装和配置-windows ### 前言------------------------------ vim做一框功能强大的编辑器,扩展功能令人称奇,插件机制非常灵活- 本篇推荐 ...

  10. mysql中文排序问题

    mysql中文排序,用到的是: SELECT id id, billId billId, namespec nameSpec, unit unit, amount amount, price pric ...