解決嵌套list類型的JSONObject/JSONArray轉換成原來list問題。


解決轉換過程中,對象的集合類成員變量變成其他類型對象的問題。

public class A {

  private List<B> blist ;

  public A(List<B> temp){

    blist = temp;

  }

  public void setBlist(List<B> temp){

    blist = temp;

  }

  

  public List<B> getBlist(){

    return blist; 

  }

}

public class Mainclass{

  public static void main(String args[]){ 

    List <A> al = new ArrayList<A>();

    List <B> bl = new ArrayList<B>();

    bl.add(new B()); 

    al.add(new A(bl));

    //防止死循環

    JsonConfig jsonConfig = new JsonConfig();
    jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);

    //變成了JSONArray的toString 傳到前台。

    String result = JSONArray.fromObject(al, jsonConfig).toString();

    //前台stringify array,傳到后台再 變回來

    JsonConfig jsonConfig = new JsonConfig();
    jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
    JSONArray jsonarray = JSONArray.fromObject(result);
    List<A> al1= new ArrayList<A>();

    //這里不能直接 使用JSONArray.toCollection() 需要把子類中的collection先處理,然后設置到父類中否則會變成一個別的對象。
    for (int i = 0; i < jsonarray.size(); i++) {
      JSONObject json = jsonarray.getJSONObject(i);
      JSONArray blist = json.getJSONArray("blist");
      @SuppressWarnings("unchecked")
      List<B> blist= (List<B>) JSONArray.toCollection(blist , B.class);
      A ob1 = (GroupProperty) JSONObject.toBean(json, A.class);
      ob1.setBlist(blist);
      al1.add(ob1);

    }

    //這里al1就對了

      System.out.println(al1);

    

  }

 

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM