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 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 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 getRecipeList() {
        return recipeList;
    }

    public void setRecipeList(List recipeList) {
        this.recipeList = recipeList;
    }

    // 此处省略get/set
    ......
}

2)RecipeResponseBO

public class RecipeResponseBO implements Serializable {

    private List 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 getRecipeDrugDetailList() {
        return recipeDrugDetailList;
    }

    public void setRecipeDrugDetailList(List 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}}

 

你可能感兴趣的:(Java,Java,JSONObject)