FastJson的使用方法總結
阿新 • • 發佈:2019-02-07
在日誌解析,前後端資料傳輸互動中,經常會遇到 String 與 map、json、xml 等格式相互轉換與解析的場景,其中 json 基本成為了跨語言、跨前後端的事實上的標準資料互動格式。應該來說各個語言中 解析 json 的庫都一大片(具體 json 格式與三方庫的介紹請見:http://www.json.org/json-zh.html),比如 python 都整合在了內建庫中,成為標準 API,今天我們要聊的是 java 中如何方便的使用 json 格式。
從上面的連結介紹中我們可以看到,java 的三方 json 庫是最多的,可謂百花齊放百家爭鳴的節奏。。。但是,某些庫存在鏈式依賴的問題,使用的時候要注意,如果你沒用 maven 管你你的依賴,用起來會很痛苦,比如 json-lib、smart-json 等。下面我要推薦的是阿里巴巴工程師開源的一個 json 庫:FastJSON,這個庫在解析速度和易用性上來說都很不錯。
1、瞭解fastjson
1.1 Fastjson介紹 Fastjson是一個Java語言編寫的JSON處理器。1、遵循 http://json.org 標準,為其官方網站收錄的參考實現之一。
2、功能qiang打,支援JDK的各種型別,包括基本的JavaBean、Collection、Map、Date、Enum、泛型。
3、無依賴,不需要例外額外的jar,能夠直接跑在JDK上。
4、開源,使用Apache License 2.0協議開源。
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 finalJSONArray 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還有很多很高階的特性
比如支援註解、支援全型別序列化,這些都是很好的特性,功能強大,不在本次測試範圍。
5、測試程式碼
Bar.java
1 import java.util.Date; 2 import java.util.Random; 3 4 import com.alibaba.fastjson.JSON; 5 import com.alibaba.fastjson.serializer.SerializeConfig; 6 import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer; 7 8 /** 9 * @author leizhimin 11-11-22 上午9:15 10 */ 11 public class Bar { 12 //SerializeConfig:是對序列化過程中一些序列化過程的特殊配置,這裡用作日期格式的定義。 13 public static SerializeConfig mapping = new SerializeConfig(); 14 15 private String barName; 16 private int barAge; 17 private Date barDate = new Date(); 18 19 static { 20 mapping.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd")); 21 } 22 23 //程式碼塊給Bar物件中的barName和barAge賦值. 24 { 25 Random random = new Random(); 26 barName = "name_"+String.valueOf(random.nextInt()); 27 barAge = random.nextInt(); 28 } 29 30 public static void main(String[] args) { 31 //把Bar物件轉換成JSON格式的Object型別 32 Object obj = JSON.toJSON(new Bar()); 33 System.out.println(obj); 34 //輸出{"barAge":-664880579,"barDate":1471348117095,"barName":"name_464160862"} 35 36 //Bar物件轉換成String型別的字串 37 String x1 = JSON.toJSONString(new Bar(), true); 38 System.out.println(x1); 39 //輸出: 40 /* 41 { 42 "barAge":1553774697, 43 "barDate":1471348117144, 44 "barName":"name_-1034255192" 45 } 46 */ 47 48 //格式化時間的JSON字串 49 String x2 = JSON.toJSONString(new Bar(), mapping); 50 System.out.println(x2); 51 //輸出:{"barAge":1755982737,"barDate":"2016-08-16","barName":"name_453018403"} 52 } 53 54 public String getBarName() { 55 return barName; 56 } 57 58 public void setBarName(String barName) { 59 this.barName = barName; 60 } 61 62 public int getBarAge() { 63 return barAge; 64 } 65 66 public void setBarAge(int barAge) { 67 this.barAge = barAge; 68 } 69 70 public Date getBarDate() { 71 return barDate; 72 } 73 74 public void setBarDate(Date barDate) { 75 this.barDate = barDate; 76 } 77 78 @Override 79 public String toString() { 80 return "Bar{" + 81 "barName='" + barName + '\'' + 82 ", barAge=" + barAge + 83 ", barDate=" + barDate + 84 '}'; 85 } 86 }
Foo.java
1 import java.util.ArrayList; 2 import java.util.Date; 3 import java.util.HashMap; 4 import java.util.List; 5 import java.util.Map; 6 7 /** 8 * @author leizhimin 11-11-22 上午9:15 9 */ 10 public class Foo { 11 //宣告Java中的8種基本變數和String型別變數. 12 private String vString = "vStringhehhehe"; 13 14 private char vchar = 'x'; 15 private byte vbyte = 64; 16 private short vshort = 128; 17 private int vint = 65535; 18 private long vlong = 9999999L; 19 private float vfloat = 12.1f; 20 private double vdouble = 22.203d; 21 private boolean vboolean = false; 22 23 //Date和Object型別變數 24 private Date vDate = new Date(); 25 private Object vnull = null; 26 27 //String,int,boolean型別的陣列 28 private String[] avString = {"aaa", "bbb", "ccc"}; 29 private int[] avint = {1, 2, 3, 4}; 30 private boolean[] avboolean = {true, false, true, true}; 31 32 //List和Map型別變數 33 private List<String> listString = new ArrayList<String>