fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。其具有速度快及使用简单的优点。JSON类是一个抽象类,其有两个继承类:JSONObject类和JSONArray类。
class UserGroup {
private String name;
private List<User> users = new ArrayList<User>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
@Override
public String toString() {
return "UserGroup [name=" + name + ", users=" + users + "]";
}
}
class UserGroup {
private String name;
private List<User> users = new ArrayList<User>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
@Override
public String toString() {
return "UserGroup [name=" + name + ", users=" + users + "]";
}
}
以下是它的常见使用:
class FastJsonTest {
public static void main(String[] args) {
// 构建用户geust
User guestUser = new User();
guestUser.setName("guest");
guestUser.setAge(28);
// 构建用户root
User rootUser = new User();
rootUser.setName("root");
guestUser.setAge(35);
// 构建用户组对象
UserGroup group = new UserGroup();
group.setName("admin");
group.getUsers().add(guestUser);
group.getUsers().add(rootUser);
// 用户组对象转JSON串
String jsonString = JSON.toJSONString(group);
System.out.println("jsonString:" + jsonString);
// JSON串转用户组对象
UserGroup group2 = JSON.parseObject(jsonString, UserGroup.class);
System.out.println("group2:" + group2);
// 构建用户对象数组
User[] users = new User[2];
users[0] = guestUser;
users[1] = rootUser;
// 用户对象数组转JSON串
String jsonString2 = JSON.toJSONString(users);
System.out.println("jsonString2:" + jsonString2);
// JSON串转用户对象列表
List<User> users2 = JSON.parseArray(jsonString2, User.class);
System.out.println("users2:" + users2);
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", "hehe");
UserGroup userGroup = JSON.toJSONObject(jsonObject, UserGroup.Class);
}
}
常见使用总结:
1)json串转对象
// 在fastjson中提供了一个用于处理泛型反序列化的类TypeReference!!,该字段传参数时需要加上{}。
因为该类本身的构造方法时protected,当不是该package下的类使用该TypeReference时,应使用其继承子类实例即可,此处{}则表示是匿名内部类实现,即采用很懒的方式创建了一个子类去继承TypeReference,这样就省去了真正新建一个类的繁琐。因为是子类,可以使用父类的protected方法对自己进行构造啦!!
---推荐该方法
UserGroup group3 = JSON.parseObject(jsonString, new TypeReference<UserGroup.class>() {});
// JSON串转用户组对象
UserGroup group2 = JSON.parseObject(jsonString, UserGroup.class);
2)json串转数组
// JSON串转用户对象列表
List<User> users2 = JSON.parseArray(jsonString2, User.class);
3)对象(包括数组对象)转jsonString
// 用户对象(数组)转JSON串
String jsonString2 = JSON.toJSONString(users);
4)JSONObject对象转java bean
JavaObject javaObject = new JavaObect();
javaObject.put("userName", "hehe");
TestDO testDO = JSON.toJavaObject(jsonObject, TestDO.class);
参考文档: