接口json参数形式

这篇博客详细介绍了如何将复杂的JSON数据解析为Java实体类,包括多层嵌套结构的处理和内部类的使用。内容涵盖从接口返回的JSON数据解析到Java DTO的映射,以及如何根据数据结构创建相应的Java类。实例展示了如何处理包含数组和嵌套JSON的对象,以及如何定义和使用内部类来表示JSON中的复杂结构。
摘要由CSDN通过智能技术生成

1、 接口json参数形式:

{
    "code": "200",
    "data": {
        "bz": "",
        "fxjg": [
            {
                "abcd": [
                    "/1/1.mp4",
                    "/1/2.mp4",
                    "/1/3.mp4",
                    "/1/4.mp4",
                    "/1/5.mp4"
                ]
            },
            {
                "efgh": []
            }
        ],
        "zhuj": "202204220000000001",
        "ertf": 5,
    },
    "message": "识别成功",
    "qqshu": 4465765,
    "signature": "周杰伦"
}

如上,是调用第三方接口后返回来的json数据,以上数据形式如下分析:

①数据的整体(最外层的大括号)可以封装成一个大的DTO用来接收调用接口成功后返回来的数据。DTO包含的成员变量就是大括号中的各项,如下:

@Data
@Accessors(chain = true)
public class GetParamterDTO implements Serializable {

    private String code;

    private String message;

    private ProjectVideoDto data;

    private Long qqshu;

    private String signature;
}

②实体中又包含实体:可以看到,大参数实体中,又包含了一个小的实体data,所以此时需要继续创建一个实体来承接data并把这个实体封装到大实体GetParamterDTO中:

@Data
@Accessors(chain = true)
public class ProjectVideoDto implements Serializable {

private String bz;

private String zhuj;

private String ertf;

private List<Map<String, List>> fxjg;

}

注意:①无论是调用接口传参还是接收接口返回的数据,起的变量名一定要和参数中的Key值保持一致

②注意data参数中的fxjg,在返回的参数data中,他的格式是这样的:

"fxjg": [
            {
                "abcd": [
                    "/1/1.jpg",
                    "/1/2.jpg",
                    "/1/3.jpg",
                    "/1/4.jpg",
                    "/1/5.jpg"
                ]
            },
            {
                "efgh": []
            }
        ],

在实体类中的类型定义是:

private List<Map<String, List>> fxjg;

如下图所示,方括号代表数组,在Java中则用List表示,数组中的每个元素是json格式的数据,即Map形式,而Map中,key是字符串,value又是一个数组,所以最后的实体类定义形式如上所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O8IGauzW-1650618069939)(参数形式.assets/image-20220422165748010.png)]

2、多层结构嵌套json

接口json参数示例:
在这里插入图片描述
如上面表格示例,共有4个表格,因此,整体上有4个实体定义结构。
其中,范围最大的是第一个data参数数据,共有3个参数信息,其中sfzxx是一个json数组,也就是第二个表格;
同理,第二个表格中也包含了一个json数组jtzz,对应第三个表格;
dfxx对应第四个表格。

调用接口的传参示例如下:

{//最外层DTO,对应的第一个表格data参数
    "xh": "679841fvgwe4+9",
    "zy": "演员",
    "sfzxx": [
        {
            "name": "刘亦菲",
            "csrq": "1985年3月",
            "jg": "籍贯北京市朝阳区"
            "jtzz": [
                {
                    "sheng": "安徽省",
                    "shi": "美女市",
                    "xian": "美女县",
                    "dfxx": [
                        {
                            "lb": "类别美女县",
                            "rksl": "200000"
                        },
                        {
                            "lb": "类别美女县",
                            "rksl": "200000"
                        },
						{
						    "lb": "类别美女县",
						    "rksl": "200000"
						}
                    ]
                },
				{
				    "sheng": "安徽省",
				    "shi": "美女市",
				    "xian": "美女县",
				    "dfxx": [
				        {
				            "lb": "类别美女县",
				            "rksl": "200000"
				        },
				        {
				            "lb": "类别美女县",
				            "rksl": "200000"
				        }
				    ]
				},
            ]
        },
       {
            "name": "刘亦菲",
            "csrq": "1985年3月",
            "jg": "籍贯北京市朝阳区"
            "jtzz": [
                {
                    "sheng": "安徽省",
                    "shi": "美女市",
                    "xian": "美女县",
                    "dfxx": [
                        {
                            "lb": "类别美女县",
                            "rksl": "200000"
                        },
                        {
                            "lb": "类别美女县",
                            "rksl": "200000"
                        }
                    ]
                }
            ]
        },
		{
		     "name": "刘亦菲",
		     "csrq": "1985年3月",
		     "jg": "籍贯北京市朝阳区"
		     "jtzz": [
		         {
		             "sheng": "安徽省",
		             "shi": "美女市",
		             "xian": "美女县",
		             "dfxx": [
		                 {
		                     "lb": "类别美女县",
		                     "rksl": "200000"
		                 },
		                 {
		                     "lb": "类别美女县",
		                     "rksl": "200000"
		                 }
		             ]
		         }
		     ]
		 }
    ]
}

java实体类定义:

/**
 * 最外层data参数DTO实体,对应第一个表格
 */
@Data
public class DataDTO implements Serializable {

    private String xh;//序号
    private String zy;//职业
    private List<SfzxxDTO> sfzxx;//Json数组,身份证信息

}



**
 * 身份证信息实体DTO,对应第二个表格
 */
@Data
public class SfzxxDTO implements Serializable {

    private String name;//姓名
    private String csrq;//出生日期
    private String jg;//籍贯
    private List<JtzzDTO> jtzz;//Json数组,家庭住址

}




/**
 * Json数组,家庭住址,对应第三个表格
 */
@Data
public class JtzzDTO implements Serializable {

    private String sheng;//省
    private String shi;//市
    private String xian;//县
    private List<DfxxDTO> dfxx;//Json数组,地方信息

}



/**
 * 地方信息实体DTO,对应第4个表格
 */
@Data
public class DfxxDTO implements Serializable {

    private String lb;//类别
    private Long rksl;//人口数量

}

3、内部类的使用

json数据样例1:

{
	"responseInfo":[
		{
			"code":"200",
			"result":"success"
		}
	],
	
	"requireWords":[
		{
			"pathType":"httpurl",
			"wordsDetails":[
				{
					"wordIdType":"fergf",
					"wordStatus":"cebri"
				}
			]
		}
	]
}

java代码:

package com.example.domain;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.util.List;

@Getter
@Setter
@NoArgsConstructor
public class BaseResponse {

    private List<ResponseInfo> responseInfo;

    @Getter
    @Setter
    @NoArgsConstructor
    @AllArgsConstructor
    public static class ResponseInfo {
        private String code;
        private String result;
    }
}

import lombok.*;
import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ResponseData extends BaseResponse {

    private List<RequireWords> requireWords;

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class RequireWords {
        private String pathType;
        private List<WordsDetails> wordsDetails;
    }

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class WordsDetails {
        private String wordIdType;
        private String wordStatus;
    }
}

json数据样例2:

{
	"fixFlowId":"hytjtkytuk",
	"documentDetailInfo":{
		"docIdCharacter":"645",
		"proCharacter":"freiuwgwe",
		"appLei":"H",
		"appId":"654758@#$",
		"docData":[
			{
				"binData":"64567",
				"docFor":"trh6786"
			}
		]
	}
}

java代码:

import lombok.*;
import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ResponseData {

    private String fixFlowId;
    private DocumentDetailInfo documentDetailInfo;


    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class DocumentDetailInfo {
        private String docIdCharacter;
        private String proCharacter;
        private String appLei;
        private String appId;
        private List<DocData> docData;
    }

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class DocData {
        private String binData;
        private String docFor;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

YD_1989

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

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

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

打赏作者

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

抵扣说明:

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

余额充值