您的位置:

Fastjson使用详解

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