需求:将json格式的文件序列化为一个对象、并存入数据库,文件内容如下:
{
"user": [{
"id": "1",
"user_name": "小米",
"age": "18",
"phone": "132677",
"CREATE_BY": "admin",
"CREATE_DATE": "2021-04-04 09:23:45",
"MODIFIED_BY": "admin",
"MODIFIED_DATE": "2021-05-01 09:23:45"
}],
"role": [{
"ID": "1",
"role_name": "普通用户"
"CREATE_BY": "admin",
"CREATE_DATE": "2021-04-04 09:23:45",
"MODIFIED_BY": "admin",
"MODIFIED_DATE": "2021-05-01 09:23:45"
}]
}
整个文件是一个Json对象,由{}括起来,所以首先将读取文件内容
/**
* 将文件内容读取成一个字符串
*/
private String readFileAsString(MultipartFile file) {
//读取文件,转化为String
BufferedReader reader = null;
String data = "";
try {
System.out.println(file.getName());
InputStream inputStream = file.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
reader = new BufferedReader(inputStreamReader);
String tempString = null;
while ((tempString = reader.readLine()) != null) {
data += tempString;
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭流对象
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return s;
}
然后解析json字符串
JSONObject jsonObject = JSON.parseObject(s);
获取jsonObject 的key集合
Set<String> keys = jsonObject.keySet();
遍历key,获取value
keys.forEach(key -> {
JSONArray jsonArray = jsonObject.getJSONArray(key);
//四、对key进行表名判断
if ("user".equalsIgnoreCase(key)) {
List<User> list = new ArrayList<>();
//五、遍历JSON数组
jsonArray.forEach(o -> {
User user = JSON.toJavaObject((JSONObject) o, User.class);
list.add(user );
});
//批量插入数据库
userMapper.insertData(list);
}else if("role".equalsIgnoreCase(key)){
List<Role> list = new ArrayList<>();
//五、遍历JSON数组
jsonArray.forEach(o -> {
Role role = JSON.toJavaObject((JSONObject) o, Role.class);
list.add(role );
});
//批量插入数据库
roleMapper.insertData(list);
}
});
}