通俗易懂介绍如何组装json字符串
admin
2024-02-22 02:07:10
0

背景

    平常的开发工作中经常会接触第三方接口,需要按照第三方规定的参数格式进行参数组装完成接口调用.对于请求方式为Get类型的接口来说,所有的参数直接在请求路径后面进行拼接即可.但是对于请求参数需要组装在请求体中的接口,类似组装下面json格式数据:

{"appid" : "wxf636efh567hg4356","out_batch_no" : "plfk2020042013","batch_name" : "2019年1月深圳分部报销单","batch_remark" : "2019年1月深圳分部报销单","total_amount" : 4000000,"total_num" : 200,"transfer_detail_list" : [{"out_detail_no" : "x23zy545Bd5436","transfer_amount" : 200000,"transfer_remark" : "2020年4月报销","openid" : "o-MYE42l80oelYMDE34nYD456Xoy"}]}

    组装类似上面json格式字符串可以说是经常碰到的需求,本文就以上面示例为例,讲述两种不同的组装方式.

1.封装对象

    平常开发中对于接口需要传递多个参数的请求(Get除外),最常用的方式就是使用将请求参数封装成一个对象,没错这里可以按照对象封装的形式进行封装.根据上面的参数示例可以看出参数存在两级关系,下面封装两个实体类.
    外层实体类:

@ApiModel("转账请求参数")
@Data
public class TransferDto implements Serializable {private static final long serialVersionUID = -2201251153238623832L;@ApiModelProperty(value = "直连商户的appid",example = "wxf636efh567hg4356",dataType = "String")private String appid;@ApiModelProperty(value = "商家批次单号",example = "plfk2020042013",dataType = "String")private String out_batch_no;@ApiModelProperty(value = "批次名称",example = "2019年1月深圳分部报销单",dataType = "String")private String batch_name;@ApiModelProperty(value = "批次备注",example = "2019年1月深圳分部报销单",dataType = "String")private String batch_remark;@ApiModelProperty(value = "转账总金额,单位分",example = "1",dataType = "Integer")private Integer total_amount;@ApiModelProperty(value = "转账总笔数",example = "1",dataType = "Integer")private Integer total_num;@ApiModelProperty(value = "转账明细列表",dataType = "list.class")private List transfer_detail_list=new ArrayList<>();
}

    内层实体类:

@ApiModel("转账请求详情参数")
@Data
public class TransferDetailDto implements Serializable {private static final long serialVersionUID = -4087771376135651941L;@ApiModelProperty(value = "商家明细单号(相当于子订单)",example = "x23zy545Bd5436",dataType = "String")private String out_detail_no;@ApiModelProperty(value = "转账金额,单位分",example = "2",dataType = "Integer")private Integer transfer_amount;@ApiModelProperty(value = "转账备注",example = "2020年4月报销",dataType = "String")private String transfer_remark;@ApiModelProperty(value = "用户在直连商户应用下的用户标示",example = "2019年1月深圳分部报销单",dataType = "String")private String openid;}

    创建好实体类开始创建对象进行组装并将对象转化为json字符串:

TransferDto transferDto = new TransferDto();transferDto.setAppid("wxf636efh567hg4356");transferDto.setOut_batch_no("plfk2020042013");transferDto.setBatch_name("2019年1月深圳分部报销单");transferDto.setBatch_remark("2019年1月深圳分部报销单");transferDto.setTotal_amount(4000);transferDto.setTotal_num(200);TransferDetailDto transferDetailDto = new TransferDetailDto();transferDetailDto.setOut_detail_no("x23zy545Bd5436");transferDetailDto.setTransfer_amount(200000);transferDetailDto.setTransfer_remark("2020年4月报销");transferDetailDto.setOpenid("o-MYE42l80oelYMDE34nYD456Xoy");transferDto.getTransfer_detail_list().add(transferDetailDto);String transferDtoStr = JSONUtil.toJsonStr(transferDto);

    下面以post请求为例,介绍如何进行发送请求(使用hutool中HttpRequest):

String returnMsg = HttpRequest.post(Constants.TRANSFER_ACCOUNT_URL)// 请求中如果要求传递指定请求头信息此处可进行指定.header("自定义请求头", "自定义请求头信息").body(transferDtoStr,"application/json").execute().body();

    hutool工具类的依赖

  cn.hutoolhutool-all5.5.2

    使用对象组装的方式比较符合平常的开发习惯,但是存在一个问题就是过于"笨重",毕竟需要创建实体类并进行实例化赋值.有没有更简便的方式,答案是肯定有的,继续往下看!

2.组装map并转化为json

    json格式key-value的形式与map结构相似,可以组装成map转化为json(实现方式有多种,本文以hutool中的parse方法进行实现).自定义map中key的数据类型一定为字符串,但是value的数据类型不一定是字符串,所以可以定义为object类型,可以适配字符串、integer以及示例中transfer_detail_list的list集合类型,transfer_detail_list集合中的元素类型又是map类型.按照以上思路进行整理之后就有了下面的实现:

 HashMap transferMap = new HashMap<>();transferMap.put("appid","wxf636efh567hg4356");transferMap.put("out_batch_no","plfk2020042013");transferMap.put("batch_name","2019年1月深圳分部报销单");transferMap.put("batch_remark","2019年1月深圳分部报销单");transferMap.put("total_amount",4000000);transferMap.put("total_num",200);ArrayList transferDetailList = new ArrayList<>();HashMap transferDetail = new HashMap<>();transferDetail.put("out_detail_no","x23zy545Bd5436");transferDetail.put("transfer_amount",200000);transferDetail.put("transfer_remark","2020年4月报销");transferDetail.put("openid","o-MYE42l80oelYMDE34nYD456Xoy");transferDetailList.add(transferDetail);transferMap.put("transfer_detail_list",transferDetailList);// 将map转化为jsonJSON parse = JSONUtil.parse(transferMap);// json对象转化为json字符串String transferDtoStr = JSONUtil.toJsonStr(parse);

    以上就是关于json字符串参数组装的两种实现方式,看到这里如果感觉有所收获欢迎点赞,如果还有其他的实现方式可以评论区留言相互学习!

相关内容

热门资讯

喵侦探 青春有你密室答案是谁? 喵侦探 青春有你密室答案是谁?不知不觉,《青春有你》这档节目也马上要迎来尾声了。在各位练习生选手们紧...
篮海青天指的什么意思? 篮海青天指的什么意思?篮海青天你说的这个应该是碧海青天吧,这个所指的意思就是指天空瓦蓝瓦蓝的,而大海...
从小就没有妈妈的女孩子的心理是... 从小就没有妈妈的女孩子的心理是如何样的应当会有恋父情结或者很欲望有一个照顾本身的女性长辈对男性依赖性...
爱过了,伤过了,该怎么做? 爱过了,伤过了,该怎么做?爱过伤过结局不完美也无所谓 坦然接受在伤之前有过爱幸福快乐的爱过已足够收起...
历史上的刘禅真的很没用吗 历史上的刘禅真的很没用吗错...历史上刘禅是一个很聪明的人,你可以找下正史,一开始刘禅是很聪明的一个...
如何彻底关闭小爱音箱啊? 如何彻底关闭小爱音箱啊?小爱音箱可以通过拔掉电源适配器实现关机。如果担心被语音误唤醒打扰,建议您按一...
我想当阴阳师,请问如何才能当? 我想当阴阳师,请问如何才能当?我不是开玩笑的,我想当阴阳师。如果有人认识阴阳师的话,请帮忙介绍。拜托...
英国经典文学作品列表 英国经典文学作品列表比较全面的哈,谢谢圣诞故事集(狄更斯的)还有沙士比亚的……呼啸山庄。简爱。其他可...
怎么开发客户 怎么开发客户1、重视客户的兴趣,与意愿与客户进行充分有效的沟通,实现厂商价值观念的一致性和认同性,树...
金鸡湖在苏州哪个区 金鸡湖在苏州哪个区工业园区,简称园区
美剧回生剧情 美剧回生剧情 《回生》是一部关于女孩死后,灵魂寻找被害真相的悬疑剧。这部改编自神秘系列剧《BeauS...
我和天蝎男交往!每天提醒我早点... 我和天蝎男交往!每天提醒我早点睡!叫我不要睡太晚!他是关心我!还是不想和我聊天!自从我们相互约定!我...
魔力泥巴 魔力泥巴年入百万,一个丫头的泥巴传奇
水浒传里谁最讲义气?要有事例的... 水浒传里谁最讲义气?要有事例的!一打祝家庄——林冲为第二拨人马领军统帅。 2、二打祝家庄——林冲神速...
有没有宝妈胎动特别明显的呀 有没有宝妈胎动特别明显的呀呵呵,之前很少有早上胎动,今天从早上到现在一直都有明显的胎动哦,有没有宝妈...
类似福尔摩斯夫人日常的文 类似福尔摩斯夫人日常的文类似福尔摩斯夫人日常的文福尔摩斯有夫人?这样的英美同人是没了不过有差不多情节...
网游金庸类小说搞笑的 网游金庸类小说搞笑的网游之武林霸图
铭字五行属什么 铭字五行属什么金铭是一种刻在器物上用来警戒自己、称述功德的文字。后来成为一种文体,这种文体一般都是用...
请教国内讲物流管理最好的职业讲... 请教国内讲物流管理最好的职业讲师呀??适合给企业做内部培训的物流管理和物流采购供应链中青咨询都有讲师...
妈妈一边做菜一边干什么?还有我... 妈妈一边做菜一边干什么?还有我一边写作业一边干嘛。人家一边玩,一边被老师骂。除了一边一边还有什么。1...