json-lib之复杂数据类型的转换

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

    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时能够使用如下方法:json

    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……this

    在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);spa

 好比我定义了以下类型:code

 

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

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

    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);  
相关文章
相关标签/搜索