简介
在写Spring Boot 项目途中有对于数据的JSON数据有一个特殊的需求,将JSON数组进行JSONObject 与 JSONArray 相关互转操作,对于FastJSON不了解的伙伴可以看看我FastJSON详解
业务分析
业务
Layui用户数据页需要一个JSON文件进行读写操作,以便通过后台进行处理。
分析
Layui的后台数据需要JSON文件进行读取,Springboot 联合 Mybatis-plus 进行一个Dao层数据交互,FastJSON负责JSON相关操作,最后Layui将JSON数据进行读取控制。
核心思路
Layui 数据是在 admin/api/xxx.json读取,后台相关数据Service及Mapper已经封装完毕后,通过queryList拿到Dao数据,进行一个IO操作,最后拿到JSONObject进行数据控制。
代码
IOUtils.java
/**
* 定义一个写入数据文件的方法
*
* @return
*/
public static boolean writeFileData(File file, String data) {
try {
Files.write(Paths.get(file.getPath()),data.getBytes(StandardCharsets.UTF_8), StandardOpenOption.APPEND);
return true;
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
/** 把一个List<Object> 的集合获取数据
*
* @param index index
* @param objects List对象
*
* @return 一个JSONObject
*/
public static JSONObject parseListJSONObject(List<?> objects,int index){
// 先定义JSONArr 把List<? > 转化成JSONString
JSONArray jsonArray = JSON.parseArray(JSON.toJSONString(objects));
return (JSONObject) jsonArray.get(index);
}
/** 利用迭代储存所有jsonObject的数据
*
* @param objects List object
* @return jsonObject的数据
*/
public static List<JSONObject> parseListObject(List<?> objects){
List<JSONObject> jsonObjects = new ArrayList<>();
Iterator<Object> jsonArray = JSON.parseArray(JSON.toJSONString(objects)).stream().iterator();
while(jsonArray.hasNext()){
JSONObject nextJSONObject = (JSONObject) jsonArray.next();
jsonObjects.add(nextJSONObject);
}
return jsonObjects;
}
/** 生成一个显示数据的Json文件
* @param json type
* @return true
*/
public static boolean createDaoJson(EntityJson json,Object[] obj){
String property = System.getProperty("user.dir");
String path = property + "/src/main/resources/static/admin/api/" + json.getName() + ".json";
File file = new File(path);
try {
if(file.exists()){
}else {
file.createNewFile();
}
}catch (Exception e){
e.printStackTrace();
}
String jsonStr = JSON.toJSONString(obj);
List<Object> jsonObject = JSON.parseArray(jsonStr,Object.class);
List<?> jsons = parseListObject(jsonObject);
System.out.println("Json Iterator:" + jsons.toString()) ;
writeFileData(file,jsonObject.toString());
return true;
}
UserController.java
/** 查询所有用户信息
*
* @return 用户信息列表
*/
@RequestMapping("/queryList")
private ApiResult queryList(){
IOUtils.createDaoJson(EntityJson.USER,userService.queryList().toArray());
return new ApiResult(ApiResult.ON_SUCCESS,ApiResult.SUCCESS_MESSAGE,userService.queryList());
}
结果
结束语
JSONArray and JSONObject 相互转换是非常简单的,将一个List<?>
进行转换只需要通过FastJson.parseObject(FastJson.toJSONString(List<?>)) 就可以拿到。
有错误之处欢迎指出,谢谢!