说明:在一些特定的情况,我们需要把对象中的List集合属性存入到数据库中,之后把该字段取出来转为List集合的对象使用(如下图)
自定义对象
public class User implements Serializable {
/**
* ID
*/
private Integer id;
/**
* 用户名
*/
private String username;
/**
* 密码
*/
private String password;
/**
* 电话
*/
private String phone;
}
即把自定义对象的List集合转为Json字符串,再转回List集合,本文介绍两种实现方式;
FastJson依赖
FastJson是阿里巴巴提供的将数据转为Json的一系列操作的工具,可以使用以下的两个方法实现
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.10</version>
</dependency>
ArrayList<User> users = new ArrayList<>();
users.add(new User(1,"root","123456","123456789"));
users.add(new User(2,"admin","123456","123456789"));
users.add(new User(3,"guest","123456","123456789"));
System.out.println("List集合toString格式 = " + users);
System.out.println("===========================================");
// fastjson
JSONArray jsonArray = JSONArray.parseArray(users.toString());
System.out.println("jsonArray = " + jsonArray);
System.out.println("===========================================");
List<User> fastJsonList = jsonArray.toJavaList(User.class);
System.out.println("fastJsonList.get(0) = " + fastJsonList.get(0));
使用这种方式,需要覆写User对象的toString()方法,如下:
@Override
public String toString() {
return "{" +
"id:" + id +
", username:'" + username + '\'' +
", password:'" + password + '\'' +
", phone:'" + phone + '\'' +
'}';
}
执行程序,可以看到转换完成;
Hutool依赖
Hutool提供了各个方面的工具,可使用其中的JSONUtil实现目的,如下:
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.6</version>
</dependency>
ArrayList<User> users = new ArrayList<>();
users.add(new User(1,"root","123456","123456789"));
users.add(new User(2,"admin","123456","123456789"));
users.add(new User(3,"guest","123456","123456789"));
System.out.println("List集合toString格式 = " + users);
System.out.println("===========================================");
String jsonStr = JSONUtil.toJsonStr(users);
System.out.println("jsonStr = " + jsonStr);
System.out.println("===========================================");
List<User> hutoolList = JSONUtil.toList(jsonStr, User.class);
System.out.println("hutoolList.get(0) = " + hutoolList.get(0));
执行结果
总结
使用fastjson、hutool工具包都可以达到目的,建议使用hutool工具包,hutool提供了许多我们经常会使用到的一些操作,如生成token、数字格式转换、对象非空判断、数字加密等等,jsonUtil只是其中一个。
而且如果使用fastjson,还需要重写对象的toString()方法,较为麻烦。