Android使用fastjson进行json数据与实体类进行拼装与解析

1 篇文章 0 订阅
1 篇文章 0 订阅

本文主要对json数据与实体类之间的拼装与解析,主要使用了fastjson、okhttp3

一、创建使用的数据类型

1.获取到上架单的数据列表,数据如下:

public class GetPageList {
    @JSONField(name = "code")
    private Integer code;
    @JSONField(name = "msg")
    private String msg;
    @JSONField(name = "count")
    private Integer count;
    @JSONField(name = "data")
    private List<DataDTO> data;

    @NoArgsConstructor
    @Data
    public static class DataDTO {
        @JSONField(name = "id")
        private Integer id;
        @JSONField(name = "hasbeenon")
        private String hasbeenon;
        @JSONField(name = "noton")
        private String noton;
        @JSONField(name = "billType")
        private String billType;
        @JSONField(name = "billNo")
        private String billNo;
        @JSONField(name = "billDate")
        private String billDate;
        @JSONField(name = "departmentNo")
        private String departmentNo;
        @JSONField(name = "targetDepartmentNo")
        private String targetDepartmentNo;
        @JSONField(name = "goodsNo")
        private String goodsNo;
        @JSONField(name = "goodsName")
        private String goodsName;
        @JSONField(name = "goodsNameFastCode")
        private String goodsNameFastCode;
        @JSONField(name = "batchNumber")
        private String batchNumber;
        @JSONField(name = "productionDate")
        private String productionDate;
        @JSONField(name = "validDate")
        private String validDate;
        @JSONField(name = "packageCount")
        private Object packageCount;
        @JSONField(name = "allowManualFinish")
        private String allowManualFinish;
    }
}

2.获取到具体单号的数据列表如下:

public class GetPackageNoList {
    @JSONField(name = "code")
    private Integer code;
    @JSONField(name = "msg")
    private String msg;
    @JSONField(name = "count")
    private Integer count;
    @JSONField(name = "data")
    private List<DataDTO> data;

    @NoArgsConstructor
    @Data
    public static class DataDTO {
        @JSONField(name = "id")
        private Integer id;
        @JSONField(name = "pid")
        private Integer pid;
        @JSONField(name = "packageNo")
        private String packageNo;
        @JSONField(name = "pageState")
        private String pageState;
    }
}

3.需要提交的数据单列表如下:

public class GetShelfList  {
    @JSONField(name = "id")
    private String id;
    @JSONField(name = "msg_type")
    private String msgType;
    @JSONField(name = "msg_time")
    private String msgtime;
    @JSONField(name = "create_user_no")
    private String create_user_no;
    @JSONField(name = "original_msg_id")
    private String original_msg_id;
    @JSONField(name = "msg_data")
    private MsgDataDTO msgData;

    @lombok.NoArgsConstructor
    @lombok.Data
    public static class MsgDataDTO {
        @JSONField(name = "billtype")
        private String billtype;
        @JSONField(name = "billNo")
        private String billNo;
        @JSONField(name = "allowManualFinish")
        private String allowManualFinish;
        @JSONField(name = "billDate")
        private String billDate;
        @JSONField(name = "departmentNo")
        private String departmentNo;
        @JSONField(name = "targetDepartmentNo")
        private String targetDepartmentNo;
        @JSONField(name = "billData")
        private List<BillDataDTO> billData;

        @lombok.NoArgsConstructor
        @lombok.Data
        public static class BillDataDTO {
            @JSONField(name = "goodsNo")
            private String goodsNo;
            @JSONField(name = "goodsBarcode")
            private Object goodsBarcode;
            @JSONField(name = "goodsName")
            private String goodsName;
            @JSONField(name = "goodsNameFastCode")
            private String goodsNameFastCode;
            @JSONField(name = "goodsSpec")
            private String goodsSpec;
            @JSONField(name = "approvalNumber")
            private Object approvalNumber;
            @JSONField(name = "manufacturer")
            private String manufacturer;
            @JSONField(name = "goodsType")
            private String goodsType;
            @JSONField(name = "packageSpec")
            private String packageSpec;
            @JSONField(name = "batchNumber")
            private String batchNumber;
            @JSONField(name = "productionDate")
            private String productionDate;
            @JSONField(name = "validDate")
            private String validDate;
            @JSONField(name = "packageCount")
            private String packageCount;
            @JSONField(name = "packageNoArray")
            private List<PackageNoArrayDTO> packageNoArray;

            @lombok.NoArgsConstructor
            @lombok.Data
            public static class PackageNoArrayDTO {
                @JSONField(name = "packageNo")
                private String packageNo;
            }
        }
    }
}

二、具体的样例数据如下:

1.上架单数据如下:

{
  "code": 0,
  "msg": "成功",
  "count": 4,
  "data": [
    {
      "id": 24,
      "hasbeenon": "2",
      "noton": "0",
      "billType": "SL",
      "billNo": "A001",
      "billDate": "2021-4-1",
      "departmentNo": "1",
      "targetDepartmentNo": "1",
      "goodsNo": "g001",
      "goodsName": "测试耗材1",
      "goodsNameFastCode": "cshc1",
      "batchNumber": "批号",
      "productionDate": "2020-8-7",
      "validDate": "2025-8-7",
      "packageCount": null,
      "allowManualFinish": "0"
    },
    {
      "id": 25,
      "hasbeenon": "2",
      "noton": "0",
      "billType": "SL",
      "billNo": "A001",
      "billDate": "2021-4-1",
      "departmentNo": "1",
      "targetDepartmentNo": "1",
      "goodsNo": "g002",
      "goodsName": "测试耗材2",
      "goodsNameFastCode": "cshc2",
      "batchNumber": "批号",
      "productionDate": "2020-8-7",
      "validDate": "2025-8-7",
      "packageCount": null,
      "allowManualFinish": "0"
    },
    {
      "id": 26,
      "hasbeenon": "1",
      "noton": "1",
      "billType": "SL",
      "billNo": "A002",
      "billDate": "2021-4-1",
      "departmentNo": "1",
      "targetDepartmentNo": "1",
      "goodsNo": "g003",
      "goodsName": "测试耗材3",
      "goodsNameFastCode": "cshc3",
      "batchNumber": "批号",
      "productionDate": "2020-8-7",
      "validDate": "2025-8-7",
      "packageCount": null,
      "allowManualFinish": "0"
    },
    {
      "id": 27,
      "hasbeenon": "1",
      "noton": "1",
      "billType": "SL",
      "billNo": "A002",
      "billDate": "2021-4-1",
      "departmentNo": "1",
      "targetDepartmentNo": "1",
      "goodsNo": "g004",
      "goodsName": "测试耗材4",
      "goodsNameFastCode": "cshc4",
      "batchNumber": "批号",
      "productionDate": "2020-8-7",
      "validDate": "2025-8-7",
      "packageCount": null,
      "allowManualFinish": "0"
    }
  ]
}

2.表单耗材详情如下:

{
  "code": 0,
  "msg": "成功",
  "count": 4,
  "data": [
    {
      "id": 52,
      "pid": 24,
      "packageNo": "R1",
      "pageState": "已上架"
    },
    {
      "id": 53,
      "pid": 24,
      "packageNo": "R2",
      "pageState": "已上架"
    },
    {
      "id": 54,
      "pid": 25,
      "packageNo": "R3",
      "pageState": "已上架"
    },
    {
      "id": 55,
      "pid": 25,
      "packageNo": "R4",
      "pageState": "已上架"
    }
  ]
}

3.需要拼装出来的发送数据如下:

{
    "create_user_no": "123",
    "id": "7913f45d-ab7c-4ea7-a7a7-d6466cf6edc6",
    "msg_time": "2021-04-20 14:42:05",
    "msg_type": "ACT",
    "msg_data": {
        "allowManualFinish": "0",
        "billDate": "2021-4-1",
        "billNo": "A001",
        "billType": "SL",
        "departmentNo": "1",
        "targetDepartmentNo": "1",
        "billData": [
            {
                "batchNumber": "批号",
                "goodsName": "测试耗材1",
                "goodsNameFastCode": "cshc1",
                "goodsNo": "g001",
                "productionDate": "2020-8-7",
                "validDate": "2025-8-7",
                "packageCount": "2",
                "packageNoArray": [
                    {
                        "packageNo": "R1"
                    },
                    {
                        "packageNo": "R2"
                    }
                ]
            },
            {
                "batchNumber": "批号",
                "goodsName": "测试耗材2",
                "goodsNameFastCode": "cshc2",
                "goodsNo": "g002",
                "productionDate": "2020-8-7",
                "validDate": "2025-8-7",
                "packageCount": "2",
                "packageNoArray": [
                    {
                        "packageNo": "R3"
                    },
                    {
                        "packageNo": "R4"
                    }
                ]
            }
        ]
    }
}

三、json数据解析到实体类

1.上架单的json数据解析到实体类

    //请求获取上架单列表
    private void getShelfList(){
        OkHttpClient client = new OkHttpClient();
        MediaType mediaType = MediaType.parse("application/json");
        Request request = new Request.Builder()
                .url("http://192.168.0.64:5001/api/admin/shelves/GetPageList?page=1&limit=100")
                .get()
                .build();
        Log.e("getShelfList", request.toString());
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.e("getShelfList", "" + e);
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String strTmp = response.body().string();
                JSONObject jsonObject = JSON.parseObject(strTmp);
                String dataT = jsonObject.getString("data");
               dataDTOList = JSON.parseArray(dataT, GetPageList.DataDTO.class);
                for(int i = 0; i < dataDTOList.size(); i++){
                    Log.e("dataDTOList", "getId = " + dataDTOList.get(i).getId() + ", getBillType = "
                            + dataDTOList.get(i).getBillType() + ", getBillDate = " + dataDTOList.get(i).getBillDate() + ", getGoodsNo = "
                            + dataDTOList.get(i).getGoodsNo() + ", getGoodsName = " + dataDTOList.get(i).getGoodsName() + ", getGoodsNameFastCode = "
                            + dataDTOList.get(i).getGoodsNameFastCode() + ", getProductionDate = " + dataDTOList.get(i).getProductionDate());
                }
            }
        });
    }

2.单号耗材详情的json数据解析到实体类

    private void getPageListMaterial(String billNo){
        OkHttpClient client = new OkHttpClient();
        MediaType mediaType = MediaType.parse("application/json");
        Request request = new Request.Builder()
                .url("http://192.168.0.64:5001/api/admin/shelves/GetPakegeNoListOnShelves?billNo=" + billNo)
                .get()
                .build();
        Log.e("getPageListMaterial", request.toString());
        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.e("getPageListMaterial", "" + e);
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                String strTmp = response.body().string();
                com.alibaba.fastjson.JSONObject jsonObject = JSON.parseObject(strTmp);
                String dataT = jsonObject.getString("data");
                NoData = JSON.parseArray(dataT, GetPackageNoList.DataDTO.class);
                for(int i = 0; i < NoData.size(); i++){
                    Log.e("getPageListMaterial", "getId = " + NoData.get(i).getId() + ", getPid = "
                            + NoData.get(i).getPid() + ", getPackageNo = " + NoData.get(i).getPackageNo() + ", getPageState = "
                            + NoData.get(i).getPageState());
                }
            }
        });
    }

3.将两个实体类填充到发送实体类中

        int[] bill_arr;
        //由外往内 拼装类数据
        //一层
        getShelfList = new GetShelfList();
        getShelfList.setId(UUID.randomUUID().toString());
        getShelfList.setMsgType("ACT");
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = new Date(System.currentTimeMillis());
        getShelfList.setMsgtime(simpleDateFormat.format(date));
        getShelfList.setCreate_user_no("123");
        getShelfList.setOriginal_msg_id(null);

        //msgDataDTOList数据
        //二层
        if(dataDTOList != null){
            bill_arr = new int[dataDTOList.size()];
            int j = 0;
            for(int i = 0; i < dataDTOList.size(); i++){
                if(dataDTOList.get(i).getBillNo().equals(billNo)){      // 判断单号
                    bill_arr[j] = i;                                    //获取单号记录
                    j++;
                    BillDataCnt++;                                      //符合单号的耗材数量,方便后面创建耗材数组
                    if(BillDataCnt == 1){   //填充msgData数据
                        msgDataDTOList = new GetShelfList.MsgDataDTO();
                        msgDataDTOList.setBillDate(dataDTOList.get(i).getBillDate());
                        msgDataDTOList.setAllowManualFinish(dataDTOList.get(i).getAllowManualFinish());
                        msgDataDTOList.setBillNo(dataDTOList.get(i).getBillNo());
                        msgDataDTOList.setBilltype(dataDTOList.get(i).getBillType());
                        msgDataDTOList.setDepartmentNo(dataDTOList.get(i).getDepartmentNo());
                        msgDataDTOList.setTargetDepartmentNo(dataDTOList.get(i).getTargetDepartmentNo());
                        getShelfList.setMsgData(msgDataDTOList);
                    }
                }
            }

            //填充billData数据
            billDataDTOList = new ArrayList<>(BillDataCnt);
            for (int i = 0; i < BillDataCnt; i++){
                billDataDTO = new GetShelfList.MsgDataDTO.BillDataDTO();
                billDataDTO.setGoodsNo(dataDTOList.get(bill_arr[i]).getGoodsNo());
                billDataDTO.setGoodsName(dataDTOList.get(bill_arr[i]).getGoodsName());
                billDataDTO.setGoodsNameFastCode(dataDTOList.get(bill_arr[i]).getGoodsNameFastCode());
                billDataDTO.setBatchNumber(dataDTOList.get(bill_arr[i]).getBatchNumber());
                billDataDTO.setProductionDate(dataDTOList.get(bill_arr[i]).getProductionDate());
                billDataDTO.setValidDate(dataDTOList.get(bill_arr[i]).getValidDate());
                //packageNoArrayDTOList数据
                //三层
                int a = 0;
                packageNoArrayDTOList = new ArrayList<>();             //进行耗材EPC分类
                for(int k = 0; k < NoData.size(); k++){              //从详情单中根据ID获取对应EPC号
                    if(dataDTOList.get(bill_arr[i]).getId() == NoData.get(k).getPid() ){
                        packageNoArrayDTO = new GetShelfList.MsgDataDTO.BillDataDTO.PackageNoArrayDTO();
                        packageNoArrayDTO.setPackageNo(NoData.get(k).getPackageNo());
                        packageNoArrayDTOList.add(a, packageNoArrayDTO);
                        a++;
                    }
                }
                billDataDTO.setPackageCount("" + a);
                billDataDTO.setPackageNoArray(packageNoArrayDTOList);
                billDataDTOList.add(i, billDataDTO);
            }
            getShelfList.getMsgData().setBillData(billDataDTOList);     //填入msgdata中的billdata
        }

四、实例类数据拼装成json数据并发送

       MediaType JSON = MediaType.parse("application/json;charset=utf-8");


        //由内往外  拼装json发送数据


        JSONArray billDataDTO_arr = new JSONArray();
        for(int i = 0; i < BillDataCnt; i++){       //填充最内层的packageNoArray
            JSONObject billDataDTO_obj = new JSONObject();
            billDataDTO_obj.put("goodsNo", getShelfList.getMsgData().getBillData().get(i).getGoodsNo());
            billDataDTO_obj.put("goodsBarcode", getShelfList.getMsgData().getBillData().get(i).getGoodsBarcode());
            billDataDTO_obj.put("goodsName", getShelfList.getMsgData().getBillData().get(i).getGoodsName());
            billDataDTO_obj.put("goodsNameFastCode", getShelfList.getMsgData().getBillData().get(i).getGoodsNameFastCode());
            billDataDTO_obj.put("goodsSpec", getShelfList.getMsgData().getBillData().get(i).getGoodsSpec());
            billDataDTO_obj.put("approvalNumber", getShelfList.getMsgData().getBillData().get(i).getApprovalNumber());
            billDataDTO_obj.put("manufacturer", getShelfList.getMsgData().getBillData().get(i).getManufacturer());
            billDataDTO_obj.put("goodsType", getShelfList.getMsgData().getBillData().get(i).getGoodsType());
            billDataDTO_obj.put("packageSpec", getShelfList.getMsgData().getBillData().get(i).getPackageSpec());
            billDataDTO_obj.put("batchNumber", getShelfList.getMsgData().getBillData().get(i).getBatchNumber());
            billDataDTO_obj.put("productionDate", getShelfList.getMsgData().getBillData().get(i).getProductionDate());
            billDataDTO_obj.put("validDate", getShelfList.getMsgData().getBillData().get(i).getValidDate());
            billDataDTO_obj.put("packageCount", getShelfList.getMsgData().getBillData().get(i).getPackageCount());
            JSONArray packageNoArray_arr = new JSONArray();
            for(int j = 0; j < Integer.valueOf(getShelfList.getMsgData().getBillData().get(i).getPackageCount()); j++){
                JSONObject packageNoArray_object = new JSONObject();
                packageNoArray_object.put("packageNo", getShelfList.getMsgData().getBillData().get(i).getPackageNoArray().get(j).getPackageNo());
                packageNoArray_arr.add(j, packageNoArray_object);
            }
            billDataDTO_obj.put("packageNoArray", packageNoArray_arr);
            billDataDTO_arr.add(i, billDataDTO_obj);
        }


        JSONObject msgData_obj = new JSONObject();      //填充二层billdata数据
        msgData_obj.put("billType", getShelfList.getMsgData().getBilltype());
        msgData_obj.put("billNo", getShelfList.getMsgData().getBillNo());
        msgData_obj.put("allowManualFinish", getShelfList.getMsgData().getAllowManualFinish());
        msgData_obj.put("billDate", getShelfList.getMsgData().getBillDate());
        msgData_obj.put("departmentNo", getShelfList.getMsgData().getDepartmentNo());
        msgData_obj.put("targetDepartmentNo", getShelfList.getMsgData().getTargetDepartmentNo());
        msgData_obj.put("billData", billDataDTO_arr);

        JSONObject msg_obj = new JSONObject();          //填充最外层msgdata数据
        msg_obj.put("id", getShelfList.getId());
        msg_obj.put("msg_type", getShelfList.getMsgType());
        msg_obj.put("msg_time", getShelfList.getMsgtime());
        msg_obj.put("create_user_no", getShelfList.getCreate_user_no());
        msg_obj.put("original_msg_id", getShelfList.getOriginal_msg_id());
        msg_obj.put("msg_data", msgData_obj);

        Log.e("msg", "" + msg_obj.toJSONString());

注:其中代码部分比较简陋,如有疏漏欢迎指正,交流可在评论留言以及联系方式;

版权声明:https://mp.csdn.net/editor/html/115908993

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KingOTC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值