一、什麼是Fastjson?
Fastjson是一種Java語言編寫的高性能JSON處理器,它提供了簡單的API來解析、生成、轉換和打印JSON。
Fastjson具有以下優點:
- 速度快 – 相對其他Java JSON處理器來說,Fastjson處理速度更快。
- 易於使用 – Fastjson API簡單易用,易於理解。
- 支持任何Java對象 – Fastjson支持把任何Java對象編碼成JSON,也支持把任何JSON解碼成Java對象。
- 無依賴性 – Fastjson不依賴於任何外部庫。
- 支持註解 – Fastjson支持使用註解來指定Java屬性和JSON字段之間的映射關係。
二、Fastjson的基本用法
1、解析JSON字符串
以下是使用Fastjson解析JSON字符串的代碼示例:
String jsonStr = "{\"name\":\"Tom\",\"age\":18}"; JSONObject json = JSON.parseObject(jsonStr); String name = json.getString("name"); int age = json.getIntValue("age"); System.out.println(name + " " + age);
以上代碼將輸出:
Tom 18
解析JSON字符串的過程就是把JSON字符串轉換成Java對象的過程。
2、生成JSON字符串
以下是使用Fastjson生成JSON字符串的代碼示例:
User user = new User(); user.setName("Tom"); user.setAge(18); String jsonString = JSON.toJSONString(user); System.out.println(jsonString);
以上代碼將輸出:
{"age":18,"name":"Tom"}
把Java對象轉換成JSON字符串的過程就是生成JSON字符串的過程。
3、轉換Java對象和JSON字符串
以下是使用Fastjson完成Java對象和JSON字符串之間互相轉換的代碼示例:
User user = new User(); user.setName("Tom"); user.setAge(18); String jsonString = JSON.toJSONString(user); User user2 = JSON.parseObject(jsonString, User.class); System.out.println(user2.getName() + " " + user2.getAge());
以上代碼將輸出:
Tom 18
三、Fastjson的高級用法
1、使用註解定製JSON
Fastjson支持使用註解來指定Java屬性和JSON字段之間的映射關係。以下是使用註解定製JSON輸出的代碼示例:
public class User { @JSONField(name="nick") private String name; @JSONField(format="yyyy-MM-dd") private Date birthday; public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } } User user = new User(); user.setName("Tom"); user.setBirthday(new Date()); String jsonString = JSON.toJSONString(user); System.out.println(jsonString);
以上代碼將輸出:
{"birthday":"2022-06-10","nick":"Tom"}
使用註解定製JSON輸出可以方便地控制輸出的格式和內容。
2、處理複雜類型
Fastjson不僅可以編碼和解碼簡單類型(如int、String、boolean等),還可以編碼和解碼複雜類型(如List、Map、JavaBean等)。以下是使用Fastjson處理複雜類型的代碼示例:
public class User { private String name; private int age; private List hobbies; private Map properties; // 省略getter和setter } User user = new User(); user.setName("Tom"); user.setAge(18); user.setHobbies(Arrays.asList("游泳", "健身")); Map props = new HashMap(); props.put("tel", "12345678901"); props.put("email", "tom@163.com"); user.setProperties(props); String jsonString = JSON.toJSONString(user); System.out.println(jsonString);
以上代碼將輸出:
{"age":18,"hobbies":["游泳","健身"],"name":"Tom","properties":{"email":"tom@163.com","tel":"12345678901"}}
處理複雜類型使得Fastjson可以更方便地對Java對象進行編碼和解碼。
3、處理日期類型
Fastjson支持處理Java中的日期類型,如Date和Calendar等。以下是使用Fastjson處理日期類型的代碼示例:
public class User { private String name; @JSONField(format="yyyy-MM-dd HH:mm:ss") private Date createTime; // 省略getter和setter } User user = new User(); user.setName("Tom"); user.setCreateTime(new Date()); String jsonString = JSON.toJSONString(user); System.out.println(jsonString);
以上代碼將輸出:
{"createTime":"2022-06-10 12:34:56","name":"Tom"}
通過指定日期格式,Fastjson可以方便地對Java的日期類型進行處理。
四、Fastjson的性能測試
以下是使用Fastjson和其他JSON庫(Gson和Jackson)進行性能測試的代碼示例:
int loopCount = 1000000; // 循環次數 User user = new User(); user.setName("Tom"); user.setAge(18); String jsonString; // 使用Fastjson long start = System.currentTimeMillis(); for (int i = 0; i < loopCount; i++) { jsonString = JSON.toJSONString(user); } long end = System.currentTimeMillis(); System.out.println("Fastjson:" + (end - start) + "ms"); // 使用Gson Gson gson = new Gson(); start = System.currentTimeMillis(); for (int i = 0; i < loopCount; i++) { jsonString = gson.toJson(user); } end = System.currentTimeMillis(); System.out.println("Gson:" + (end - start) + "ms"); // 使用Jackson ObjectMapper mapper = new ObjectMapper(); start = System.currentTimeMillis(); for (int i = 0; i < loopCount; i++) { jsonString = mapper.writeValueAsString(user); } end = System.currentTimeMillis(); System.out.println("Jackson:" + (end - start) + "ms");
以上代碼將輸出每個JSON庫的性能測試結果。
五、結語
Fastjson是一個高性能的Java JSON處理器,它提供了簡單易用的API,支持任何Java對象的編碼和解碼,並且支持使用註解定製JSON輸出。Fastjson的性能也非常不錯,是其他JSON庫的兩倍以上。
原創文章,作者:LTJGB,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/368576.html