1、json数据的直接分析
https://blog.csdn.net/yeweij226/article/details/100017315这个博客写的很简单易懂 推荐大家进行学习
2、springboot前后端分离:json数据的封装和使用
前后分离时,我们要定义好统一的接口返回格式
{
"code": "200",
"message": null,
"data": {
"schoolId": "100",
"illcount": "1",
"grouplist":
{
"illstatistics":
[
{
"illcount": "29",
"illtypename": "应到人数"
},
{
"illcount": "1",
"illtypename": "缺勤人数"
}
]
}
}
}
如果我们要从这个json数据中要拿出对应的illtypename和illcount数据传给前端。
{
“code”: “200”,
“message”: “发送成功”,
“data”: {
“illtypename”: [
“应到人数”,
“缺勤人数”
],
“illcount”: [
“29”,
“1”
]
}
}
(1)首先创建bean文件夹并创建一个DataResult类用来封装返回数据的统一格式
public class DataResult<T> {
String code;
String message;
private T data;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
(2)创建pojo文件夹,在其下又创建dto和resp文件夹。dto文件夹下创建的是json数据里每一阶层对应的key(你要用到哪个key就创建哪个,不用可以不创建,但是如果是子层的key,一定要把父层也创建好,因为这是层层扫描的),比如,我们要拿到的数据是grouplist下的illstatistics下的illcount和illtypename。所以一定要把grouplist和illstatistics也创建好,其他的key可以不用创建(但为了演示,我创建了)。resp文件夹下创建的是返回给前端的响应数据,你想要返回什么数据给前端,就创建什么字段。
import lombok.Data;
import java.util.List;
@Data
public class DataDto {
private String schoolId;
private String illcount;
private List<GrouplistDto> grouplist;
}
import lombok.Data;
import java.util.List;
@Data
public class GrouplistDto {
List<IllstatisticsDto> illstatistics;
}
import lombok.Data;
@Data
public class IllstatisticsDto {
private String illcount;
private String illtypename;
}
import lombok.Data;
import java.util.List;
@Data
public class JsonDataResp {
private List<String> illtypename;
private List<String> illcount;
}
(3)在controller层测试(这里使用了fastjson,是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发,够快)
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.example.bean.DataResult;
import com.example.pojo.dto.DataDto;
import com.example.pojo.dto.GrouplistDto;
import com.example.pojo.dto.IllstatisticsDto;
import com.example.pojo.resp.JsonDataResp;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@RestController
public class getJsonController {
@GetMapping("/getjson")
public static DataResult<JsonDataResp> getJsonData()
{
String str = "{\"code\":\"200\",\"message\":\"null\",\"data\": [{\"schoolId\": \"100\",\"illcount\": \"1\",\"grouplist\": {\"illstatistics\": " +
"[{\"illcount\": \"29\",\"illtypename\": \"应到人数\"}, { \"illcount\": \"1\",\"illtypename\": \"缺勤人数\"}]}}]}";
DataResult<JsonDataResp> dataResult = new DataResult<>();//创建返回响应数据集
JsonDataResp jsonDataResp = new JsonDataResp(); //创建json数据响应返回
JSONObject rawData = JSONObject.parseObject(str); //把String类型的str数据转化为JSONObject对象之后就可以使用其内置的方法
String dataString =rawData.getString("data"); //把JSONObject对象中key为data的数据存入字符串中
List<DataDto> dataDtoList = JSONArray.parseArray(dataString,DataDto.class);//将dataString字符串转换成List
List<GrouplistDto> grouplistDtoList;
List<String> illcount =new ArrayList<>(); //用来存储返回响应的illcount
List<String> illtypename =new ArrayList<>(); //用来存储返回响应的illtypename
for (DataDto dataDto:dataDtoList) //遍历data
{
if (dataDto == null) continue;
grouplistDtoList = dataDto.getGrouplist();//把key为data下grouplist数据赋值给grouplistDtoList
List<IllstatisticsDto> illstatisticsDtoList;
for (GrouplistDto grouplistDto:grouplistDtoList)//遍历grouplist
{
if (grouplistDto == null) continue;
illstatisticsDtoList = grouplistDto.getIllstatistics();//把key为illstatistics下的数据赋值给illstatisticsDtoList
for (IllstatisticsDto illstatisticsDto:illstatisticsDtoList)//遍历illstatistics
{
illcount.add(illstatisticsDto.getIllcount());//把从遍历illstatistics下的illcount放入临时数据中
illtypename.add(illstatisticsDto.getIlltypename());//把从遍历illstatistics下的illtypename放入临时数据中
}
}
jsonDataResp.setIllcount(illcount);//把临时数组放入json数据响应返回中
jsonDataResp.setIlltypename(illtypename);
}
dataResult.setMessage("发送成功");//可以自己设置Message常量
dataResult.setCode("200");//可以自己设置code常量
dataResult.setData(jsonDataResp);//把json数据响应放入响应数据集中,传给前端页面
return dataResult;
}
}
在postman中得到的结果:
{
"code": "200",
"message": "发送成功",
"data": {
"illtypename": [
"应到人数",
"缺勤人数"
],
"illcount": [
"29",
"1"
]
}