Java書籤 # 多層List集合的Json字符串轉Java對象

楔子:無處可去和無處可回,這和自由完全是兩回事。《理由》

 

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}}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章