1. 程式人生 > >阿里fastjson框架基礎

阿里fastjson框架基礎

fastjson 是阿里巴巴公司開源的一個json序列化、反序列化輕量級框架,號稱最快。
是因為其內建演算法的增強,以及序列化時對class進行了細節的微妙處理,更多細節請檢視其專案原始碼:https://github.com/alibaba/fastjson
常用方法示例:

package org.bron4j.jsn;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.
TypeReference; import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.serializer.SerializerFeature; import lombok.*; import org.junit.Ignore; import org.junit.Test; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Date; import java.util.List; import
java.util.Map; /** * 阿里fastjson使用示例 * <pre> * 隙月窺人小。 * 無情汴水自東流。 * 只載一船離恨、向西州。 * 竹溪花浦曾同醉。 * 酒味多於淚。 * 誰教風鑑在塵埃。 * 醞造一場煩惱、送人來。 * </pre> */ public class FastJson1 { @Test @Ignore public void test(){ // 序列化 Object jsonObj = JSON.toJSON(User.builder() .
name("Byron") .age(17) .build()); System.out.println("JSON.toJSON 序列化結果:" + jsonObj); // 反序列化 System.out.println("JSON.parseObject 反序列化結果:" + JSON.parseObject(jsonObj.toString(), User.class)); List<String> list = new ArrayList<>(); list.add("A"); list.add("B"); // JSON.toJSON(list) 再強轉成JAONARRAY JSONArray jSONArray = (JSONArray)JSON.toJSON(list); System.out.println("list序列化為jsonarra:" + jSONArray); System.out.println("JSONArray.parseArray:" + JSONArray.parseArray("[\"A\",\"B\"]")); Date date = new Date(); // 指定序列化解析器 System.out.println("時間序列化:" + JSON.toJSONString(date, SerializerFeature.WriteDateUseDateFormat)); // 指定格式 System.out.println("指定時間格式序列化::" + JSON.toJSONStringWithDateFormat(date,"yyyy-MM-dd HH:mm:ss.SSS")); System.out.println(JSON.toJSONString(date, SerializerFeature.WriteClassName)); Object stuObj = JSON.toJSON(Student.builder() .age(11) .id(1) .name("Harry") .build()); System.out.println(stuObj); // 反序列化集合 System.out.println("反序列化集合:" + JSON.parseObject("[\"A\",\"B\"]", String.class)); String text = "{\"name\":{\"name\":\"ljw\",age:18}}"; Map<String, User> userMap = JSON.parseObject(text, new TypeReference<Map<String, User>>() {}); System.out.println("泛型反序列化:" + userMap); // 組合型別的反序列化 List comList = new ArrayList(); comList.add(User.builder() .age(2) .build()); comList.add(Student.builder() .name("Sker") .build()); String jsonStr= ((JSONArray)JSON.toJSON(comList)).toString(); List res = JSON.parseArray(jsonStr, new Type[]{User.class, Student.class}); for (Object ele : res){ System.out.println("組合型別(list中包含多種資料型別的場景)反序列化:" + ele); } } /** * 常用方法使用 */ @Test public void jsonMethodTest(){ JSONObject jsonObj = JSON.parseObject("{\"name\":\"Harry\",\"ID\":1,\"age\":11}"); System.out.println(jsonObj); Student s = JSON.parseObject("{\"name\":\"Harry\",\"ID\":1,\"age\":11}", Student.class); System.out.println(s.getName()); List list = JSONObject.parseArray("[\"A\",\"B\"]", String.class); System.out.println(list); String jsonStr = JSONObject.toJSONString(s); System.out.println(jsonStr); // 第二個引數是表示是否格式化輸出json串的形式 String jsonStr2 = JSONObject.toJSONString(s, true); System.out.println(jsonStr2); JSONObject js = (JSONObject) JSON.toJSON(s); System.out.println(js); } @Getter @Setter @Builder @AllArgsConstructor @NoArgsConstructor @ToString static class User{ String name; int age; } @Getter @Setter @Builder @AllArgsConstructor @NoArgsConstructor @ToString static class Student{ int id; String name; int age; /** * @JSONField 顯示指定序列化的欄位值,使用ID輸出 * @return */ @JSONField(name="ID") public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } }