自创的安卓代码生成器-Json转Bean
大家好,上一篇讲了安卓代码生成器的配置和运行,这次讲第一个功能Json转Bean。
首先找一段简单的json字符串:
{"code":200,"message":"操作成功","data":{id:1,content:"hello world"}}
复制到输入框中,并写入类名,如HelloWorldBean,点击生成,界面如下:
输出框中生成了转换后的JavaBean代码:
package com.zheng.template.bean;
import java.util.List;
import com.zbase.interfaces.IPullToRefreshResponse;
/**
* 创建人:飞刀帮主
* 创建日期:2020/07/12
* 描述:HelloWorldBean
*/
public class HelloWorldBean {
private int code;
private String message;
private Data data;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code=code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message=message;
}
public Data getData() {
return data;
}
public void setData(Data data) {
this.data=data;
}
public class Data {
private int id;
private String content;
public int getId() {
return id;
}
public void setId(int id) {
this.id=id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content=content;
}
}
}
可以复制此代码到工程中创建类使用。
有没有发现顶部类名右边有两个可选框?是“文件是否写入工程”和“列表接口”。
第一个你猜对了,就是默认勾选此项,输出框中的代码直接写入到你的工程文件中,而不用你再手动复制代码,手动创建类了。生成的类文件如下:
工程中自动创建了HelloWorldBean的java文件,是不是很爽?别急,以后介绍的各种功能还会让你更爽,所以关注我吧,绝对不亏,搜索公众号【飞刀帮主】,点击关注,各种工具资料秒发给你,让你爽到起飞!
那么第二个选项列表接口是什么呢?勾选的话,生成的代码多了一个实现接口,如下:
public class HelloWorldBean implements IPullToRefreshResponse {
这个接口是结合我自创的快速开发框架里面的自动下拉刷新,上拉加载更多的模块使用的,后面会讲到,这里先不用勾选。
说了简单的json,再来说一下复杂json的情况,就是有嵌套的json。
找来一段复杂的json:
{"code":200,"message":"操作成功","data":[{"Productlist":[{"id":46,"name":"DTY-SD","pic":"https://dss3.baidu.com/-rVXeDTa2gU2pMbgoY3K/it/u=1185503687,3861005915&fm=202&mola=new&crop=v1","price":2.00,"albumPics":"http://106.52.149.78:9000/mall/20200613/img_21592031628296.jpg,http://106.52.149.78:9000/mall/20200613/img_31592031633197.jpg,http://106.52.149.78:9000/mall/20200613/img_41592031638359.jpg","batchNumber":"467913893891","specifications":"70D/24F","grade":1,"gloss":0,"priceType":1},{"id":47,"name":"FDT-SD","pic":"https://dss3.baidu.com/-rVXeDTa2gU2pMbgoY3K/it/u=1185503687,3861005915&fm=202&mola=new&crop=v1","price":3.00,"albumPics":"http://106.52.149.78:9000/mall/20200613/img_21592047094835.jpg,http://106.52.149.78:9000/mall/20200613/img_41592047099613.jpg","batchNumber":"9847djn300","specifications":"12D/12F","grade":2,"gloss":1,"priceType":1}],"ShopName":"平台自营","ShopId":1},{"Productlist":[{"id":39,"name":"FD-POY","pic":"https://dss3.baidu.com/-rVXeDTa2gU2pMbgoY3K/it/u=1185503687,3861005915&fm=202&mola=new&crop=v1","price":10.00,"albumPics":"http://106.52.149.78:9000/mall/20200613/img_21592031593135.jpg,http://106.52.149.78:9000/mall/20200613/img_31592031598219.jpg,http://106.52.149.78:9000/mall/20200613/img_41592031602727.jpg,http://110.90.127.29:9000/mall/20200704/QQ202007032019471593830126231.png","batchNumber":"12741037391","specifications":"50D/12F","grade":2,"gloss":0,"priceType":1}],"ShopName":"福建锦江科技有限公司","ShopId":21}]}
点击生成,工程中生成的java代码:
package com.zheng.template.bean;
import java.util.List;
/**
* 创建人:飞刀帮主
* 创建日期:2020/07/12
* 描述:ProductListBean
*/
public class ProductListBean {
private int code;
private String message;
private List<Data> data;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public List<Data> getData() {
return data;
}
public void setData(List<Data> data) {
this.data = data;
}
public class Data {
private List<Productlist> Productlist;
private String ShopName;
private int ShopId;
public List<Productlist> getProductlist() {
return Productlist;
}
public void setProductlist(List<Productlist> Productlist) {
this.Productlist = Productlist;
}
public String getShopName() {
return ShopName;
}
public void setShopName(String ShopName) {
this.ShopName = ShopName;
}
public int getShopId() {
return ShopId;
}
public void setShopId(int ShopId) {
this.ShopId = ShopId;
}
public class Productlist {
private int id;
private String name;
private String pic;
private int price;
private String albumPics;
private String batchNumber;
private String specifications;
private int grade;
private int gloss;
private int priceType;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPic() {
return pic;
}
public void setPic(String pic) {
this.pic = pic;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getAlbumPics() {
return albumPics;
}
public void setAlbumPics(String albumPics) {
this.albumPics = albumPics;
}
public String getBatchNumber() {
return batchNumber;
}
public void setBatchNumber(String batchNumber) {
this.batchNumber = batchNumber;
}
public String getSpecifications() {
return specifications;
}
public void setSpecifications(String specifications) {
this.specifications = specifications;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public int getGloss() {
return gloss;
}
public void setGloss(int gloss) {
this.gloss = gloss;
}
public int getPriceType() {
return priceType;
}
public void setPriceType(int priceType) {
this.priceType = priceType;
}
}
}
}
看到没,生成了带List的private List<Productlist> Productlist;,并且自动定义了内部类public class Productlist {
private int id;
private String name;
private String pic;
private int price;
private String albumPics;
private String batchNumber;
private String specifications;
private int grade;
private int gloss;
private int priceType;
public int getId() {
return id;
}
也就是说不管多复杂的嵌套json都能生成,而且只生成一个类文件。这样就避免了复杂json生成多个类的情况。当然这个也是有利有弊,优点是可读性较好,外部类和内部类的结构清晰可见。缺点当然也有,如果有很多地方使用到里面的内部类,还需要自己抽取出来一个独立类文件。
当时我做这个工具的初衷就是因为在线的工具生成的不是嵌套内部类的情况,而是一个个单独的类。这样结构不清晰,经常点击内部类去查看,甚至继续查看它的内部类的内部类的内部类。当我看完最里层的那个类文件的时候,我已经忘记了它的那些外部类的情况了。然后继续跳转到各种上层的类去查看,脑子里很难形成一个整体的结构。而整个类的好处就是一个文件看下来,结构缩进等非常清晰,脑子里很容易记住里面各个类的关系。另一个原因就是线上工具不能直接将代码文件写入到本地工程中。
线上工具举个例子,地址,https://www.sojson.com/json2entity.html
生成的实体类是这样的:
==================================
package ;
public class Productlist
{
private int id;
private String name;
private String pic;
private int price;
private String albumPics;
private String batchNumber;
private String specifications;
private int grade;
private int gloss;
private int priceType;
public void setId(int id){
this.id = id;
}
public int getId(){
return this.id;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void setPic(String pic){
this.pic = pic;
}
public String getPic(){
return this.pic;
}
public void setPrice(int price){
this.price = price;
}
public int getPrice(){
return this.price;
}
public void setAlbumPics(String albumPics){
this.albumPics = albumPics;
}
public String getAlbumPics(){
return this.albumPics;
}
public void setBatchNumber(String batchNumber){
this.batchNumber = batchNumber;
}
public String getBatchNumber(){
return this.batchNumber;
}
public void setSpecifications(String specifications){
this.specifications = specifications;
}
public String getSpecifications(){
return this.specifications;
}
public void setGrade(int grade){
this.grade = grade;
}
public int getGrade(){
return this.grade;
}
public void setGloss(int gloss){
this.gloss = gloss;
}
public int getGloss(){
return this.gloss;
}
public void setPriceType(int priceType){
this.priceType = priceType;
}
public int getPriceType(){
return this.priceType;
}
}
==================================
package ;
import java.util.ArrayList;
import java.util.List;
public class Data
{
private List<Productlist> Productlist;
private String ShopName;
private int ShopId;
public void setProductlist(List<Productlist> Productlist){
this.Productlist = Productlist;
}
public List<Productlist> getProductlist(){
return this.Productlist;
}
public void setShopName(String ShopName){
this.ShopName = ShopName;
}
public String getShopName(){
return this.ShopName;
}
public void setShopId(int ShopId){
this.ShopId = ShopId;
}
public int getShopId(){
return this.ShopId;
}
}
==================================
package ;
import java.util.ArrayList;
import java.util.List;
public class Root
{
private int code;
private String message;
private List<Data> data;
public void setCode(int code){
this.code = code;
}
public int getCode(){
return this.code;
}
public void setMessage(String message){
this.message = message;
}
public String getMessage(){
return this.message;
}
public void setData(List<Data> data){
this.data = data;
}
public List<Data> getData(){
return this.data;
}
}
是一个个分散的类,需要自己复制并创建各个类文件。
当然最后还是要根据自己项目的具体情况做调整。如果有些内部类经常被用到,或者服务端返回的json接口中有多个相同的内部类。这时候最好抽取相同的内部类出来,维护和可读性会更好。
最后说一下,这个工具当然也支持swagger自动文档的Example Value
{
"code": 0,
"data": {
"author": "string",
"browseNum": 0,
"content": "string",
"createTime": "2020-07-12T01:39:17.637Z",
"id": 0,
"isView": 0,
"note": "string",
"origin": "string",
"sortId": 0,
"sortName": "string",
"status": 0,
"thumbnail": "string",
"title": "string"
},
"message": "string"
}
好了,今天的内容分享就到这了,我们下篇见。
【我是小尾巴】自创的安卓快速开发框架,自创的自定义控件,自创的代码生成器,自创的代码模板,自创的demo集合。并开始涉猎springboot,vue,uniapp,unicloud,云函数,云数据库,cocoscreator游戏开发。同时也分享一些好用的软件,开发工具,学习视频。关注微信公众号【飞刀帮主】免费获取资料。