JAVA实现多层Json数据封装成实体对象
最近在做一个多层json字符串封装成实体对象的demo,在这里记录一下,废话不说了直接上代码吧
添加依赖
<dependency>
<groupId>net.glxn</groupId>
<artifactId>qrgen</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>
Json格式字符串
String str = "{" +
"'Header': [{" +
" 'TRANSACTION_ID':'19'," +
" 'DELIVERY_NUMBER':'111'," +
" }]," +
"'Cartons' : [{" +
" 'BARCODE_ID':'1'," +
" 'ITEM_QTY':'1'," +
" },{" +
" 'BARCODE_ID':'2'," +
" 'ITEM_QTY':'2'," +
" },{" +
" 'BARCODE_ID':'3'," +
" 'ITEM_QTY':'4'," +
" }]," +
"}";
实体类Header
package pojo;
/**
* @OUTHOR CLS
* @CREATE 2020 /06 /03 11:37
*/
public class Header {
private String TRANSACTION_ID;
private String DELIVERY_NUMBER;
public String getTRANSACTION_ID() {
return TRANSACTION_ID;
}
public void setTRANSACTION_ID(String TRANSACTION_ID) {
this.TRANSACTION_ID = TRANSACTION_ID;
}
public String getDELIVERY_NUMBER() {
return DELIVERY_NUMBER;
}
public void setDELIVERY_NUMBER(String DELIVERY_NUMBER) {
this.DELIVERY_NUMBER = DELIVERY_NUMBER;
}
@Override
public String toString() {
return "Header{" +
"TRANSACTION_ID='" + TRANSACTION_ID + '\'' +
", DELIVERY_NUMBER='" + DELIVERY_NUMBER + '\'' +
'}';
}
}
实体类Cartons
package pojo;
/**
* @OUTHOR CLS
* @CREATE 2020 /06 /03 11:39
*/
public class Cartons {
private String BARCODE_ID;
private String ITEM_QTY;
public String getBARCODE_ID() {
return BARCODE_ID;
}
public void setBARCODE_ID(String BARCODE_ID) {
this.BARCODE_ID = BARCODE_ID;
}
public String getITEM_QTY() {
return ITEM_QTY;
}
public void setITEM_QTY(String ITEM_QTY) {
this.ITEM_QTY = ITEM_QTY;
}
@Override
public String toString() {
return "Cartons{" +
"BARCODE_ID='" + BARCODE_ID + '\'' +
", ITEM_QTY='" + ITEM_QTY + '\'' +
'}';
}
}
实体类Oqc
package pojo;
import java.util.List;
/**
* @OUTHOR CLS
* @CREATE 2020 /06 /03 11:37
*/
public class Oqc {
List<Object> cartons;
List<Object> header;
public List<Object> getCartons() {
return cartons;
}
public void setCartons(List<Object> cartons) {
this.cartons = cartons;
}
public List<Object> getHeader() {
return header;
}
public void setHeader(List<Object> header) {
this.header = header;
}
}
接下来就是处理json格式字符串了
public static List<Oqc> jsonParse(String str) {
//存储Oqc对象
List<Oqc> oqcList = new ArrayList<>();
//字符串转换json
JSONObject jsonobject = JSON.parseObject(str);
try {
//获取一个json数组
JSONArray headerJson = jsonobject.getJSONArray("Header");
//存储Header对象
List<Header> headerList = new ArrayList<Header>();
//这里是解析json里Header
for (int i = 0; i < headerJson.size(); i++) {
JSONObject object = (JSONObject) headerJson.get(i);
Header header = JSONObject.toJavaObject(object, Header.class);
if (header != null) {
headerList.add(header);
}
}
//将json数组 转换成List<Cartons>泛型
JSONArray cartonsJson = jsonobject.getJSONArray("Cartons");
//存储Cartons对象
List<Cartons> cartonsList = new ArrayList<Cartons>();
//这里是解析json里Cartons
for (int a = 0; a < cartonsJson.size(); a++) {
JSONObject object = (JSONObject) cartonsJson.get(a);
Cartons cartons = JSONObject.toJavaObject(object, Cartons.class);
if (cartons != null) {
cartonsList.add(cartons);
}
}
Oqc oqc = new Oqc();
oqc.setHeader(Collections.singletonList(headerList));
oqc.setCartons(Collections.singletonList(cartonsList));
//存入oqc
oqcList.add(oqc);
return oqcList;
} catch (Exception e) {
System.err.println(e.toString());
return null;
}
}
public static void main(String[] args) {
String str = "{" +
"'Header': [{" +
" 'TRANSACTION_ID':'19'," +
" 'DELIVERY_NUMBER':'111'," +
" }]," +
"'Cartons' : [{" +
" 'BARCODE_ID':'1'," +
" 'ITEM_QTY':'1'," +
" },{" +
" 'BARCODE_ID':'2'," +
" 'ITEM_QTY':'2'," +
" },{" +
" 'BARCODE_ID':'3'," +
" 'ITEM_QTY':'4'," +
" }]," +
"}";
List<Oqc> oqcList = jsonParse(str);
for (Oqc oqc : oqcList) {
System.out.println(oqc.getHeader());
System.out.println(oqc.getCartons());
}
}
这里我说一下,上面的代码不只是一定要封装成实体,现在都不会这么的去做了,都是全部动态的,我这里的动态是指:比如 Header 类里有N个字段呢,难不成你还要一个一个敲吗?这是不现实的所以这里可以把实体对象通通去掉,实现起来比这个博文代码少了好多。