首页 > 代码库 > json-lib之复杂数据类型的转换

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

 

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