json-lib之複雜資料類型的轉換

來源:互聯網
上載者:User

標籤:

在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之複雜資料類型的轉換

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.