一、簡介
fastjson是阿里巴巴開源的一個高性能、功能強大、使用廣泛的Java JSON庫,具有對Java對象和JSON字符串的自動轉換、支持任意複雜度的JSON格式、支持Java泛型、支持Java註解、支持流式API等特性。fastjson不但在Java語言中廣泛使用,而且還有多種語言、平台的實現,如.NET、Python、iOS、Android等,成為各個領域、各個語言中最流行的JSON解析工具之一。
二、使用示例
下面是一個簡單的fastjson使用示例:
public class User {
private String name;
private int age;
//setter和getter方法
}
User user = new User();
user.setName("張三");
user.setAge(20);
String jsonString = JSON.toJSON(user).toString(); //對象轉JSON字符串
User newUser = JSON.parseObject(jsonString, User.class); //JSON字符串轉對象
三、JSON格式支持
fastjson支持任意複雜度的JSON格式,如下所示:
{
"name":"張三",
"age":20,
"address": {
"province":"廣東",
"city":"深圳",
"street":"科技園路"
},
"friends":[
{
"name":"李四",
"age":18
},
{
"name":"王五",
"age":21
}
]
}
fastjson還支持非標準的JSON格式,如以下兩種情況:
四、Java泛型支持
fastjson能夠很好地支持Java泛型,如下所示:
public class ListResponse<T> {
private int total;
private List<T> list;
//setter和getter方法
}
ListResponse<User> response = new ListResponse<>();
response.setTotal(2);
List<User> userList = new ArrayList<>();
User user1 = new User();
user1.setName("張三");
user1.setAge(20);
User user2 = new User();
user2.setName("李四");
user2.setAge(18);
userList.add(user1);
userList.add(user2);
response.setList(userList);
String jsonString = JSON.toJSON(response).toString(); //對象轉JSON字符串
ListResponse<User> newResponse = JSON.parseObject(jsonString, new TypeReference<ListResponse<User>>(){});
//JSON字符串轉對象
五、註解支持
fastjson支持對Java對象的屬性使用註解進行標記。目前,fastjson支持的註解有以下四種:
- @JSONField:可以用來指定JSON字符串與Java對象屬性之間的映射關係。
- @JSONType:可以用來指定Java類的序列化和反序列化時的行為。
- @JSONCreator:可以用來指定JSON字符串中幾個屬性值,如何構造Java對象。
- @JSONPOJOBuilder:可以用來指定如何構建Java對象。
下面是一個使用@JSONField註解的示例:
public class User {
@JSONField(name = "user_name")
private String name;
@JSONField(name = "user_age")
private int age;
//setter和getter方法
}
六、流式API支持
fastjson還提供了流式API的支持,可以逐步構建JSON字符串。
String jsonString = JSON
.createObjectWriter()
.startObject()
.writeKey("name")
.writeValue("張三")
.writeKey("age")
.writeValue(20)
.endObject()
.toString();
七、擴展方法支持
fastjson還支持擴展方法,可以輕鬆地添加和使用自定義功能。例如,可以添加一個判斷字符串是否為純數字的方法:
public class JSONUtils {
public static boolean isNumeric(String str) {
if (str == null || str.length() == 0) {
return false;
}
for (char c : str.toCharArray()) {
if (!Character.isDigit(c)) {
return false;
}
}
return true;
}
}
//使用方法
JSONValidator.registerValidator(String.class, new Validator() {
@Override
public boolean validate(ValidatorContext context, Object value) {
return JSONUtils.isNumeric((String) value);
}
});
JSON.toJSONString("123456", SerializerFeature.WriteClassName, SerializerFeature.QuoteFieldNames);
原創文章,作者:MEYO,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/138186.html