fastjson是什麼東東?

來源:互聯網
上載者:User

標籤:oid   自己的   輸入   變數   ejs   基本   system   lan   就會   

fastjson是一個Java語言編寫的高效能功能完善的JSON庫。它採用一種“假定有序快速匹配”的演算法,把JSON Parse的效能提升到極致,是目前Java語言中最快的JSON庫。Fastjson介面簡單易用,已經被廣泛使用在緩衝序列化、協議互動、Web輸出、Android用戶端等多種應用情境。

pom.xml

depencency:

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.34</version>
</dependency>

 

http://www.cnblogs.com/Jie-Jack/p/3758046.html

序列化

序列化就是指 把JavaBean對象轉成JSON格式的字串。

com.alibaba.fastjson.JSON提供了許多方法(多態)實現序列化。

1.基本的序列化
String objJson = JSON.toJSONString(Object object);

傳入一個對象,將對象轉成JSON字串。

例1:將Map轉成JSON

1 Map<String, Object> map = new HashMap<String, Object>();2 map.put("key1", "One");3 map.put("key2", "Two");4         5 String mapJson = JSON.toJSONString(map);

輸出結果:

{"key1":"One","key2":"Two"}

例2:將List<Map>轉成JSON。

 1 List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); 2          3 Map<String, Object> map1 = new HashMap<String, Object>(); 4 map1.put("key1", "One"); 5 map1.put("key2", "Two"); 6          7 Map<String, Object> map2 = new HashMap<String, Object>(); 8 map2.put("key1", "Three"); 9 map2.put("key2", "Four");10         11 list.add(map1);12 list.add(map2);13         14 String listJson = JSON.toJSONString(list);

輸出結果:

[{"key1":"One","key2":"Two"},{"key3":"Three","key4":"Four"}]

例3:自訂JavaBean User轉成JSON。

1 User user = new User();2 user.setUserName("李四");3 user.setAge(24);4         5 String userJson = JSON.toJSONString(user);

輸出結果:

{"age":24,"userName":"李四"}

可以輸出格式化後的 JSON 字串。

String objJson = JSON.toJSONString(Object object, boolean prettyFormat);

傳入一個對象和一個布爾類型(是否格式化),將對象轉成格式化後的JSON字串。

例4:以例2代碼為例。

String listJson = JSON.toJSONString(list, true);

輸出結果為:

 1 [ 2     { 3         "key1":"One", 4         "key2":"Two" 5     }, 6     { 7         "key3":"Three", 8         "key4":"Four" 9     }10 ]

FastJSON提供了許多特性支援。

String objJson = JSON.toJSONString(Object object, SerializerFeature... features) 

傳入一個對象和SerializerFeature類型的可變變數。SerializerFeature是一個枚舉。

com.alibaba.fastjson.serializer.SerializerFeature

你可以根據自己的情況使用這些特性。

簡單說下幾個常用的特性:

1.日期格式化:

FastJSON可以直接對日期類型格式化,在預設的情況下,FastJSON會將Date轉成long。

例5:FastJSON將java.util.Date轉成long。

1 String dateJson = JSON.toJSONString(new Date());2         3 System.out.println(dateJson);

輸出結果:

1401370199040

例6:使用SerializerFeature特性格式化日期。

1 String dateJson = JSON.toJSONString(new Date(), SerializerFeature.WriteDateUseDateFormat);2         3 System.out.println(dateJson);

輸出結果:

"2014-05-29 21:36:24"

也可以指定輸出日期格式。

例7:指定輸出日期格式。

1 String dateJson = JSON.toJSONStringWithDateFormat(new Date(), "yyyy-MM-dd HH:mm:ss.SSS");2         3 System.out.println(dateJson);

輸出結果:

"2014-05-29 21:47:00.154"

2.使用單引號。

例8:以例2為例。

String listJson = JSON.toJSONString(list, SerializerFeature.UseSingleQuotes);

輸出結果:

[{‘key1‘:‘One‘,‘key2‘:‘Two‘},{‘key3‘:‘Three‘,‘key4‘:‘Four‘}]

3.JSON格式化。

例9:

String listJson = JSON.toJSONString(list, SerializerFeature.PrettyFormat);

輸出結果:與例4結果一致。

4.輸出Null欄位。

 預設情況下FastJSON不輸入為值Null的欄位,可以使用SerializerFeature.WriteMapNullValue使其輸出。

例10:

1 Map<String, Object> map = new HashMap<String,Object>();2         3 String b = null;4 Integer i = 1;5         6 map.put("a", b);7 map.put("b", i);8         9 String listJson = JSON.toJSONString(map, SerializerFeature.WriteMapNullValue);

輸出結果:

{"a":null,"b":1}

5.序列化是寫入類型資訊。

例11:

1 User user = new User();2         3 user.setAge(18);4 user.setUserName("李四");5         6 String listJson = JSON.toJSONString(user, SerializerFeature.WriteClassName);

輸出結果:

{"@type":"User","age":18,"userName":"李四"}

由於序列化帶了類型資訊,使得還原序列化時能夠自動進行類型識別。

例12:將例11還原序列化。

1 User user1 = (User) JSON.parse(listJson);2         3 System.out.println(user1.getAge());

輸出結果:

18

如果User序列化是沒有加入類型資訊(SerializerFeature.WriteClassName),按照例12的做法就會報錯(java.lang.ClassCastException)。

 

還原序列化

還原序列化就是把JSON格式的字串轉化為Java Bean對象。

com.alibaba.fastjson.JSON提供了許多方法(多態)實現還原序列化。

 

 簡單舉幾個例子。

指定Class資訊還原序列化。

例13:將例3還原序列化。

1 User user1 = JSON.parseObject(userJson, User.class);2 System.out.println(user1.getUserName());

輸出結果:

李四

集合還原序列化。

例14:將例2還原序列化。

1 List<Map> list1 = JSON.parseArray(listJson, Map.class);2          3 for(Map<String, Object> map : list1){4     System.out.println(map.get("key1"));5     System.out.println(map.get("key2"));         6 }

輸出結果:

1 One2 Two3 Three4 Four

泛型的還原序列化(使用TypeReference傳入類型資訊)。

例15:將例1還原序列化。

1 Map<String, Object> map1 = JSON.parseObject(mapJson, new TypeReference<Map<String, Object>>(){});2 System.out.println(map1.get("key1"));3 System.out.println(map1.get("key2"));

輸出結果:

1 One2 Two

 

---------------------------------------------------------------------------------------------------------------------------------------------------------

JSONObject,JSONArray是JSON的兩個子類。

JSONObject相當於Map<String, Object>,

JSONArray相當於List<Object>。

簡單方法樣本:

例16:將Map轉成JSONObject,然後添加元素,輸出。

 1 Map<String, Object> map = new HashMap<String, Object>(); 2 map.put("key1", "One"); 3 map.put("key2", "Two"); 4                             5 JSONObject j = new JSONObject(map); 6                     7 j.put("key3", "Three"); 8            9 System.out.println(j.get("key1"));10 System.out.println(j.get("key2"));11 System.out.println(j.get("key3"));

輸出結果:

 

1 One2 Two3 Three

 

 

例17:將List對象轉成JSONArray,然後輸出。

 1 List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); 2          3 Map<String, Object> map = new HashMap<String, Object>(); 4 map.put("key1", "One"); 5 map.put("key2", "Two"); 6          7 Map<String, Object> map2 = new HashMap<String, Object>(); 8 map2.put("key1", "Three"); 9 map2.put("key2", "Four");10         11 list.add(map);12 list.add(map2);13         14 JSONArray j = JSONArray.parseArray(JSON.toJSONString(list));15          16 for(int i=0; i<j.size(); i++){17     System.out.println(j.get(i));18 }

輸出結果:

1 {"key1":"One","key2":"Two"}2 {"key1":"Three","key2":"Four"}

更多方法使用請參考API(沒有注釋的API,讓我很頭疼啊)。

 

end

 

fastjson是什麼東東?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.