• 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);  
  • 相关阅读:
    优雅的windowsC++项目的配置
    C++实现编码转换
    C++读取配置文件
    完全依赖QML实现播放器
    记一次和“N+1”的擦肩而过
    FFmpeg4.0笔记:采集系统声音
    FFmpeg4.0笔记:采集桌面
    FFmpeg4.0笔记:封装ffmpeg的解封装功能类CDemux
    SDL2:封装媒体显示播放Csdl2
    FFmpeg4.0笔记:封装ffmpeg的音频重采样功能类CSwr
  • 原文地址:https://www.cnblogs.com/yuanchengxu/p/5936832.html
Copyright © 2020-2023  润新知