工作的时候遇到一个需求,需要将某些查询的东西输出为.json文件,之后通过某些手段进行传输,还有种常见的需求是输出为.zip文件,这个见另一个,本篇简单介绍输出为.json文件。
首先我们创建一个User类模拟我们查到的结果(实际情况下你可能查到了一个列表、一份清单等,但是都可以创建一个类,定义字段去接收查询的结果)。
public class User {
private String name;
private int age;
private List<String> genders;
public User() {
}
public User(String name, int age, List<String> genders) {
this.name = name;
this.age = age;
this.genders = genders;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List<String> getGenders() {
return genders;
}
public void setGender(List<String> genders) {
this.genders = genders;
}
}
之后简单造一些数据,然后实现输出为.json文件。
public class JsonWrite {
public static void main(String[] args) {
// 模拟数据
List<User> users = new ArrayList<>();
users.add(new User("张小三", 18, Collections.singletonList("男")));
users.add(new User("李小四", 28, Collections.singletonList("女")));
users.add(new User("王小五", 38, Arrays.asList("男", "女")));
// 指定文件存放的文件夹位置
String folderPath = "E:/write";
// 指定文件名称
String fileName = "user.json";
// 校验文件夹是否存在,不存在创建
File folder = new File(folderPath);
if (!folder.exists()) {
folder.mkdirs();
}
// 将目录路径和文件名组合成完整的文件路径
File file = new File(folderPath, fileName);
// 创建对象准备序列化
ObjectMapper objectMapper = new ObjectMapper();
// 启用格式化(自动换行)
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
try {
// 序列化文件(反序列化为readValue(jsonString, User.class))
objectMapper.writeValue(file, users);
System.out.println("输出成功" + file.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
System.out.println("输出失败");
}
}
}
控制台打印:输出成功E:\write\user.json。
打开E盘找到write文件夹,里面有user.json文件,选择idea打开,结果为:
[ {
"name" : "张小三",
"age" : 18,
"genders" : [ "男" ]
}, {
"name" : "李小四",
"age" : 28,
"genders" : [ "女" ]
}, {
"name" : "王小五",
"age" : 38,
"genders" : [ "男", "女" ]
} ]