zoukankan      html  css  js  c++  java
  • json-lib之复杂数据类型的转换

    在json字符串转java bean时,一般的对象,可以直接转,如:一个学生类,属性有姓名、年龄等

        public class Student{  
    
            private String sname;  
            private Integer age;  
            public String getSname() {  
                return sname;  
            }  
            public void setSname(String sname) {  
                this.sname = sname;  
            }  
            public Integer getAge() {  
                return age;  
            }  
            public void setAge(Integer age) {  
                this.age = age;  
            }  
              
        }  

    由字符串转java bean时可以使用以下方法:

        JSONObject jobj = JSONObject.fromObject(str);  
        Student s = (Student) JSONObject.tobean(jobj,Student.class);  

    是没有问题的,但是如果属性中含有复杂的类型,当其中属性有类似List , Map ,ArrayList、自定义的类型,如List<Teacher> teachers, 就不可以了。 会报错:MorphDynaBean cannot be cast to con.test……

        在JSONObject.toBean的时候如果转换的类中有集合,可以先定义Map<String, Class> classMap = new HashMap<String, Class>();在classMap中put你要转换的类中的集合名,像:classMap.put("teachers", Teacher.class);然后在toBean()的时候把参数加上, 像:Student student=(Student) JSONObject.toBean(str, Student.class, classMap);

     比如我定义了如下类型:

        import java.util.List;  
    
        public class AnalysisModel{  
          
            /** 
             * 固定条件 
             */  
            private List<Condition> regularCondtionList;//  
            /** 
             * 动态条件 
             */  
            private List<ConditionField> dynamicConFieldList;  
            /** 
             * 结果 
             */  
            private List<ResultField> resultField;  
            /** 
             * 获取前多少条数据 
             */  
            private Integer topnum;  
            /** 
             * 顺序还是随机 
             */  
            private String sortFlag;  
            /** 
             * 备注 
             */  
            private String remark;  
            /** 
             * 模型名称 
             */  
            private String modelName;  
            /** 
             * 对应的xml文件名称 
             */  
            private String fileName;  
            public List<Condition> getRegularCondtionList() {  
                return regularCondtionList;  
            }  
            public void setRegularCondtionList(List<Condition> regularCondtionList) {  
                this.regularCondtionList = regularCondtionList;  
            }  
            public List<ConditionField> getDynamicConFieldList() {  
                return dynamicConFieldList;  
            }  
            public void setDynamicConFieldList(List<ConditionField> dynamicConFieldList) {  
                this.dynamicConFieldList = dynamicConFieldList;  
            }  
            public Integer getTopnum() {  
                return topnum;  
            }  
            public void setTopnum(Integer topnum) {  
                this.topnum = topnum;  
            }  
            public String getSortFlag() {  
                return sortFlag;  
            }  
            public void setSortFlag(String sortFlag) {  
                this.sortFlag = sortFlag;  
            }  
            public String getRemark() {  
                return remark;  
            }  
            public void setRemark(String remark) {  
                this.remark = remark;  
            }  
          
              
            public String getModelName() {  
                return modelName;  
            }  
            public void setModelName(String modelName) {  
                this.modelName = modelName;  
            }  
            public List<ResultField> getResultField() {  
                return resultField;  
            }  
            public void setResultField(List<ResultField> resultField) {  
                this.resultField = resultField;  
            }  
            public String getFileName() {  
                return fileName;  
            }  
            public void setFileName(String fileName) {  
                this.fileName = fileName;  
            }  
              
        }  

    在转化的时候需要这样来写:

        Map<String, Class> classMap = new HashMap<String, Class>();  
          
        classMap.put("regularCondtionList", Condition.class);  
          
        classMap.put("dynamicConFieldList", ConditionField.class);  
          
        classMap.put("resultField", ResultField.class);  
          
        AnalysisModel analysisModel=(AnalysisModel) JSONObject.toBean(str, AnalysisModel.class, classMap);  
  • 相关阅读:
    SpringBoot插件——EasyCode的使用(以MySQL为例)
    Springboot整合mybaties
    linux破解navicat for mysql
    springboot整合thymeleaf——引用静态资源
    整合thymeleaf
    Error: errCode: -404011 cloud function execution error | errMsg: clou……错误
    JqueryMobile与php跳转问题
    Hbuilder环境下配置php
    Bean的三种实例化方式
    利用TFTP命令上传下载H3C交换机配置文件
  • 原文地址:https://www.cnblogs.com/yuanchengxu/p/5936832.html
Copyright © 2011-2022 走看看