JSON数据的解析总结

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"]

  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值