一、什么是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 Listhobbies; 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库的两倍以上。