Java书签 #多层List对象集合嵌套的Json字符串转List对象集合

楔子:无处可去和无处可回,这和自由完全是两回事。- 宫部美雪《理由》

 

1.今日书签

Java中包含多层List对象集合嵌套的Json字符串直接转换为List对象集合实现方案。

 

2.自由自在

1)jar 包依赖

<dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
</dependency>

2)需要使用到:net.sf.json.JSONObject,不是 com.alibaba.fastjson

    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 List 对象集合中涉及到的实体对象案例:

注意: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
    }
}

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值