• 一个jsonstring转换的实例


    一、需求

    现有list:
    [
        {
            "type":"呼吸系统",
            "illness":"肺气肿",
            "quotaName": "血压"
        },
        {
            "type":"呼吸系统",
            "illness":"肺气肿",
            "quotaName": "血常规"
        },
       {
            "type":"呼吸系统",
            "illness":"哮喘",
            "quotaName": "血常规"
        },
       {
            "type":"循环系统",
            "illness":"高血压",
            "quotaName": "心电图"
        },
       {
            "type":"循环系统",
            "illness":"高血压",
            "quotaName": "心电彩超"
        }
    ]
    想得到的list:
    [
        {
            "type":"呼吸系统",
            "illnessList":[
                {
                   "name":"肺气肿", 
                   "quotaList":[
                       {
                           "name":"血压"
                       },
                       {
                           "name":"血常规"
                       }
                   ]
                },
                {
                    "name":"哮喘",
                    "quotaList":[
                        {
                            "name":"血常规"
                        }
                    ]
                }
            ]
        },
        {
            "type":"循环系统",
            "illnessList":[
                {
                    "name":"高血压",
                    "quotaList":[
                        {
                            "name":"心电图"
                        },
                        {
                            "name":"心电彩超"
                        }
                    ]
                }
            ]
        }
    ]

    二、实现

      1)输入对象

    package jsonarray;
    
    /**
     * 输入对象
     */
    public class FromDataBo {
        
        private String type;
        private String illness;
        private String quotaName;
        
        public String getType() {
            return type;
        }
        public void setType(String type) {
            this.type = type;
        }
        public String getIllness() {
            return illness;
        }
        public void setIllness(String illness) {
            this.illness = illness;
        }
        public String getQuotaName() {
            return quotaName;
        }
        public void setQuotaName(String quotaName) {
            this.quotaName = quotaName;
        }
    
    }

      2)输出对象

    package jsonarray;
    
    import java.util.List;
    import java.util.Map;
    import java.util.stream.Collectors;
    
    /**
     * 输出对象
     */
    public class ToDataBo {
        
        private String type;
        private List<ToDataIllnessBo> illnessList;
        
        public String getType() {
            return type;
        }
        public void setType(String type) {
            this.type = type;
        }
        public List<ToDataIllnessBo> getIllnessList() {
            return illnessList;
        }
        public void setIllnessList(List<ToDataIllnessBo> illnessList) {
            this.illnessList = illnessList;
        }
    
        /**
         * map转化为List<ToDataBo>
         * @param map
         * @return
         */
        public static List<ToDataBo> createByMap(Map<String, Map<String, List<String>>> map){
            return map.entrySet().stream().map(ToDataBo::of).collect(Collectors.toList());
        }
    
        /**
         * 一个Map.Entry<String, Map<String, List<String>>>对应转化为一个ToDataBo
         * @param entry
         * @return
         */
        public static ToDataBo of(Map.Entry<String, Map<String, List<String>>> entry){
            ToDataBo dataBo = new ToDataBo();
            dataBo.setType(entry.getKey());
            dataBo.setIllnessList(entry.getValue().entrySet().stream().map(ToDataIllnessBo::of).collect(Collectors.toList()));
            return dataBo;
        }
        
        static class ToDataIllnessBo{
            private String name;
            private List<ToDataQuotaBo> quotaList;
    
            public String getName() {
                return name;
            }
            public void setName(String name) {
                this.name = name;
            }
    
            public List<ToDataQuotaBo> getQuotaList() {
                return quotaList;
            }
            public void setQuotaList(List<ToDataQuotaBo> quotaList) {
                this.quotaList = quotaList;
            }
    
            /**
             * 一个Map.Entry<String, List<String>>对应转化为一个ToDataIllnessBo
             * @param entry
             * @return
             */
            public static ToDataIllnessBo of(Map.Entry<String, List<String>> entry){
                ToDataIllnessBo dataIllnessBo = new ToDataIllnessBo();
                dataIllnessBo.setName(entry.getKey());
                dataIllnessBo.setQuotaList(entry.getValue().stream().map(ToDataQuotaBo::new).collect(Collectors.toList()));
                return dataIllnessBo;
            }
        }
        
        static class ToDataQuotaBo {
            private String name;
    
            public String getName() {
                return name;
            }
            public void setName(String name) {
                this.name = name;
            }
    
            public ToDataQuotaBo(String name) {
                this.name = name;
            }
            public ToDataQuotaBo() {}
        }
    }

      3)测试类

    package jsonarray;
    
    import java.util.List;
    import java.util.Map;
    import java.util.stream.Collectors;
    import com.alibaba.fastjson.JSONArray;
    
    public class Test {
        
        public static void main(String[] args) {
            
            String from = "[\n" +
                    "        {\n" +
                    "            \"type\":\"呼吸系统\",\n" +
                    "            \"illness\":\"肺气肿\",\n" +
                    "            \"quotaName\": \"血压\"\n" +
                    "        },\n" +
                    "        {\n" +
                    "            \"type\":\"呼吸系统\",\n" +
                    "            \"illness\":\"肺气肿\",\n" +
                    "            \"quotaName\": \"血常规\"\n" +
                    "        },\n" +
                    "       {\n" +
                    "            \"type\":\"呼吸系统\",\n" +
                    "            \"illness\":\"哮喘\",\n" +
                    "            \"quotaName\": \"血常规\"\n" +
                    "        },\n" +
                    "       {\n" +
                    "            \"type\":\"循环系统\",\n" +
                    "            \"illness\":\"高血压\",\n" +
                    "            \"quotaName\": \"心电图\"\n" +
                    "        },\n" +
                    "       {\n" +
                    "            \"type\":\"循环系统\",\n" +
                    "            \"illness\":\"高血压\",\n" +
                    "            \"quotaName\": \"心电彩超\"\n" +
                    "        }\n" +
                    "    ]";
            
            // 把输入的JSONArray字符串转化为FromDataBo集合
            List<FromDataBo> fromDataBos = JSONArray.parseArray(from, FromDataBo.class);
            // 归类
            Map<String, Map<String, List<String>>> collect = fromDataBos.stream().collect(
                                    // 按照type分类
                                    Collectors.groupingBy(FromDataBo::getType,
                                            // 按照type分类后,同一类的数据再按照illness分类
                                            Collectors.groupingBy(FromDataBo::getIllness,
                                                    // 按照type分类,再按照illness分类后,同一类的数据取其中的QuotaName并转化为集合
                                                    Collectors.mapping(FromDataBo::getQuotaName, Collectors.toList()))));
            // 归类后的map转化为输出对象ToDataBo集合
            List<ToDataBo> toDataBos = ToDataBo.createByMap(collect);
            
            // 我是输出对象
            JSONArray result = JSONArray.parseArray(JSONArray.toJSONString(toDataBos));
            System.out.println(result);
            
        }
    }
  • 相关阅读:
    [20220314联考] 旅行
    [ZJOI2015] 地震后的幻想乡
    [20220315联考] 等你哈苏德
    [20220318联考] 无向图
    java线程池ThreadPoolTaskExecutor执行顺序
    数据结构单向链表的实现(内含c代码,已调试,可用)
    数据结构双向链表的实现(内含c代码,已调试,可用)
    Python回顾
    220221220223
    言论1
  • 原文地址:https://www.cnblogs.com/xieegai/p/8207259.html
Copyright © 2020-2023  润新知