轉載http://blog.csdn.net/hongwangzhang/article/details/51260879html
在日誌解析,先後端數據傳輸交互中,常常會遇到 String 與 map、json、xml 等格式相互轉換與解析的場景,其中 json 基本成爲了跨語言、跨先後端的事實上的標準數據交互格式。應該來講各個語言中 解析 json 的庫都一大片(具體 json 格式與三方庫的介紹請見: http://www.json.org/json-zh.html ),好比 Python 都集成在了內置庫中,成爲標準 API,今天咱們要聊的是 Java 中如何方便的使用 json 格式。java
從上面的連接介紹中咱們能夠看到,java 的三方 json 庫是最多的,可謂百花齊放百家爭鳴的節奏。。。可是,某些庫存在鏈式依賴的問題,使用的時候要注意,若是你沒用 maven 管你你的依賴,用起來會很痛苦,好比 json-lib、smart-json 等。下面我要推薦的是阿里巴巴工程師開源的一個 json 庫:FastJSON,這個庫在解析速度和易用性上來講都很不錯。 python
1.1 Fastjson介紹git
Fastjson是一個Java語言編寫的JSON處理器。
一、遵循 http://json.org 標準,爲其官方網站收錄的參考實現之一。
二、功能qiang打,支持JDK的各類類型,包括基本的JavaBean、Collection、Map、Date、Enum、泛型。
三、無依賴,不須要例外額外的jar,可以直接跑在JDK上。
四、開源,使用Apache License 2.0協議開源。github
1.2 若是得到Fastjson?
https://github.com/alibaba/fastjsonjson
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。
SerializeWriter:至關於StringBuffer數組
JSONArray:至關於List<Object>ruby
JSONObject:至關於Map<String, Object>app
JSON反序列化沒有真正數組,本質類型都是List<Object>
好比支持註解、支持全類型序列化,這些都是很好的特性,功能強大,不在本次測試範圍。
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() {