楔子:無處可去和無處可回,這和自由完全是兩回事。《理由》
1.書籤引短
多層List集合的Json字符串轉Java對象代碼實現方案。
2.解決方案
需要使用到:net.sf.json.JSONObject
public static void main(String[] args) {
// 將JSON字符串轉換成JSON對象
JSONObject jsonBean = JSONObject.fromObject(jsonObjectStr);
// 添加JSON對象中出現的需要轉換的對象到Map中
Map<String, Class> classMap = new HashMap<>();
classMap.put("result", ResponsePageInfoBO.class);
classMap.put("recipeList", RecipeResponseBO.class);
classMap.put("recipeDrugDetailList", RecipeDrugResponseBO.class);
// 將JSON對象轉換成JAVA對象
ReturnInfo returnInfo = (ReturnInfo) JSONObject.toBean(jsonBean, ReturnInfo.class, classMap);
System.out.println(JSON.toJSONString(returnInfo));
}
多層List集合的Json字符串轉Java對象中涉及到的實體對象:
注意:Java對象的屬性名要與Json字符串中出現的字段名稱保持一致。
1)ResponsePageInfoBO
public class ResponsePageInfoBO implements Serializable {
private List<RecipeResponseBO> recipeList;
private Integer prePage;
private Integer pages;
private Integer nextPage;
private Boolean hasNextPage;
private Integer navigateLastPage;
private Integer navigatePages;
private Integer[] navigatePageNums;
private Integer size;
private Boolean isFirstPage;
private Integer startRow;
private Boolean hasPreviousPage;
private Integer navigateFirstPage;
private Integer total;
private Integer endRow;
private Integer pageNum;
private Integer pageSize;
private Boolean isLastPage;
public List<RecipeResponseBO> getRecipeList() {
return recipeList;
}
public void setRecipeList(List<RecipeResponseBO> recipeList) {
this.recipeList = recipeList;
}
// 此處省略get/set
......
}
2)RecipeResponseBO
public class RecipeResponseBO implements Serializable {
private List<RecipeDrugResponseBO> recipeDrugDetailList;
private String name;
private Integer age;
private Integer gender;
private String phoneNumber;
private String storeName;
private String doctorName;
private String symptom;
private String illness;
public List<RecipeDrugResponseBO> getRecipeDrugDetailList() {
return recipeDrugDetailList;
}
public void setRecipeDrugDetailList(List<RecipeDrugResponseBO> recipeDrugDetailList) {
this.recipeDrugDetailList = recipeDrugDetailList;
}
public String getName() {
return name;
}
// 此處省略get/set
......
}
3)RecipeDrugResponseBO
public class RecipeDrugResponseBO implements Serializable {
private String drugName;
private Integer num;
private String unit;
private String spec;
private String perNum;
private String perUnit;
private Integer dose;
private String usage;
private Integer usageFrequencyCode;
private String usageFrequencyName;
public String getDrugName() {
return drugName;
}
// 此處省略get/set
......
}
測試數據:
public static final String jsonObjectStr = "{\n" +
" \"result\": {\n" +
" \"endRow\": 1, \n" +
" \"firstPage\": false, \n" +
" \"hasNextPage\": false, \n" +
" \"hasPreviousPage\": false, \n" +
" \"lastPage\": false, \n" +
" \"recipeList\": [\n" +
" {\n" +
" \"age\": 32, \n" +
" \"doctorName\": \"陳醫生\", \n" +
" \"recipeDrugDetailList\": [\n" +
" {\n" +
" \"dose\": 1, \n" +
" \"drugName\": \"板藍根顆粒\", \n" +
" \"num\": 1, \n" +
" \"perNum\": \"1\", \n" +
" \"perUnit\": \"包\", \n" +
" \"spec\": \"2\", \n" +
" \"unit\": \"盒\", \n" +
" \"usage\": \"口服\", \n" +
" \"usageFrequencyCode\": 1, \n" +
" \"usageFrequencyName\": \"每天三次\"\n" +
" },\n" +
" {\n" +
" \"dose\": 1, \n" +
" \"drugName\": \"四季感冒靈\", \n" +
" \"num\": 1, \n" +
" \"perNum\": \"1\", \n" +
" \"perUnit\": \"包\", \n" +
" \"spec\": \"2\", \n" +
" \"unit\": \"盒\", \n" +
" \"usage\": \"口服\", \n" +
" \"usageFrequencyCode\": 1, \n" +
" \"usageFrequencyName\": \"每天三次\"\n" +
" }\n" +
" ], \n" +
" \"gender\": 1, \n" +
" \"illness\": \"感冒\", \n" +
" \"name\": \"談笑\", \n" +
" \"phoneNumber\": \"19999999999\", \n" +
" \"storeName\": \"測試店\", \n" +
" \"symptom\": \"感冒\"\n" +
" }\n" +
" ], \n" +
" \"navigateFirstPage\": 1, \n" +
" \"navigateLastPage\": 1, \n" +
" \"navigatePages\": 8, \n" +
" \"navigatePageNums\": [\n" +
" 1\n" +
" ], \n" +
" \"nextPage\": 0, \n" +
" \"pageNum\": 1, \n" +
" \"pageSize\": 15, \n" +
" \"pages\": 1, \n" +
" \"prePage\": 0, \n" +
" \"size\": 1, \n" +
" \"startRow\": 1, \n" +
" \"total\": 1\n" +
" }, \n" +
" \"ok\": true\n" +
"}";
測試結果:
{"ok":true,"result":{"endRow":1,"firstPage":false,"hasNextPage":false,"hasPreviousPage":false,"lastPage":false,"navigateFirstPage":1,"navigateLastPage":1,"navigatePageNums":[1],"navigatePages":8,"nextPage":0,"pageNum":1,"pageSize":15,"pages":1,"prePage":0,"recipeList":[{"age":32,"doctorName":"陳醫生","gender":1,"illness":"感冒","name":"談笑","phoneNumber":"19999999999","recipeDrugDetailList":[{"dose":1,"drugName":"板藍根顆粒","num":1,"perNum":"1","perUnit":"包","spec":"2","unit":"盒","usage":"口服","usageFrequencyCode":1,"usageFrequencyName":"每天三次"},{"dose":1,"drugName":"四季感冒靈","num":1,"perNum":"1","perUnit":"包","spec":"2","unit":"盒","usage":"口服","usageFrequencyCode":1,"usageFrequencyName":"每天三次"}],"storeName":"測試店","symptom":"感冒"}],"size":1,"startRow":1,"total":1}}