各位好,
  我现在有一个json 树的字符串,想把它转换为list<AClass>对象,请帮一下。
谢谢! public void test8(){
 String s="[{\"id\":\"329\",\"txt\":\"IT\",\"items\":[{\"id\":\"337\",\"txt\":\"机构\"},{\"id\":\"338\",\"txt\":\"机构2\",\"items\":[{id:\"887\",txt:\"内部\"},{id:\"888\",txt:\"内部2\"}]}]},{\"id\":\"345\",\"txt\":\"IT2\"}]";
          List<AClass> rs=test6(s);
         }请问这个test6该怎么写,执行完后rs 中存放都是AClass对象。这个String s只是一个示例,实际它会是一个不定层数的数。AClass 类是这样的形式:public class AClass{
private String id;
private String txt;
private List items;
private String iscat;

public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTxt() {
return txt;
}
public void setTxt(String txt) {
this.txt = txt;
}
 
public List getItems() {
return items;
}
public void setItems(List items) {
this.items = items;
}
public String getIscat() {
return iscat;
}
public void setIscat(String iscat) {
this.iscat = iscat;
}



}

解决方案 »

  1.   


    package test2;import java.util.List;
    import net.sf.json.JSONArray;public class ToJSON {
    public static List test(String s,Class clazz){
    JSONArray jarr=JSONArray.fromObject(s);
            return (List)jarr.toCollection(jarr,clazz);
    }

    public static void main(String[] args){
    String s="[{\"id\":\"329\",\"txt\":\"IT\",\"items\":[{\"id\":\"337\",\"txt\":\"机构\"},{\"id\":\"338\",\"txt\":\"机构2\",\"items\":[{id:\"887\",txt:\"内部\"},{id:\"888\",txt:\"内部2\"}]}]},{\"id\":\"345\",\"txt\":\"IT2\"}]"; 
    List<AClass> list=test(s,AClass.class);
    for(AClass ac:list){
    System.out.println(ac.getId());
    }
    }
    }
      

  2.   

    正解
    用开源的spi就可以了
    net.sf.json这个比较常用
      

  3.   

    fishrui,你好,   你这样只能遍历出最外层的2个节点,里面的items节点不能遍历出来。
      

  4.   

    推荐使用JSON.simple库。
      

  5.   


    import java.util.Iterator;
    import org.json.JSONArray;
    import org.json.JSONException;
    public class Test{
     public static void main(String[] args) throws JSONException{
            String s="[{\"id\":\"329\",\"txt\":\"IT\",\"items\":[{\"id\":\"337\",\"txt\":\"机构\"}," +
             "{\"id\":\"338\",\"txt\":\"机构2\",\"items\":[{id:\"887\",txt:\"内部\"}," +
             "{id:\"888\",txt:\"内部2\"}]}]},{\"id\":\"345\",\"txt\":\"IT2\"}]"; 
            
            jsonToList(s);
        }
        public static void jsonToList(String str) throws JSONException{
         JSONArray ja=new JSONArray(str);
            for(int i=0;i<ja.length();i++){
             Iterator<?> items=ja.getJSONObject(i).keys();
             while(items.hasNext()){
             String keyName=items.next().toString();
             System.out.println(keyName+": "+ja.getJSONObject(i).getString(keyName));
            if("items".equals(keyName))
            jsonToList(ja.getJSONObject(i).getString(keyName));
             }
            }
        }
    }解析就这么解析,至于怎么组装成list,你自己想办法!
      

  6.   

    closewbq,
      你好,你这个代码好像遍历了所有的key值,但好像不能把一些属性值组合成一个Object.最后这样实现了。
    谢谢各位。public String test3(String arg0) {
     List<ATreeClass> objt= JSonUtil.jsonStrToList(arg0,ATreeClass.class);
     List<ATreeClass> rslist=new ArrayList<ATreeClass>();
     actJson(objt,rslist);   
             return "";
    }

        private void actJson(List<ATreeClass> items,List<ATreeClass> rslist){
            for(ATreeClass o:items){
             ATreeClass aa=new ATreeClass();
                  aa.setId(o.getId());
                 aa.setTxt(o.getTxt());
                 aa.setIscat(o.getIscat());
                 aa.setItems(o.getItems());
                 rslist.add(aa);
             if(o.getItems()!=null){
            actJson(o.getItems(),rslist);
             }
            }
         } public static List<ATreeClass> jsonStrToList(String jsonString, Class pojoClass){
            JSONArray jsonArray = JSONArray.fromObject(jsonString);
            JSONObject jsonObject;
            List list = new ArrayList();
         Map <String, Class> m = new HashMap <String, Class>(); 
         m.put("items", pojoClass); 
            for ( int i = 0 ; i<jsonArray.size(); i++){
                jsonObject = jsonArray.getJSONObject(i);
                ATreeClass fb= (ATreeClass)JSONObject.toBean(jsonObject,ATreeClass.class,m); 
                list.add(fb);
            }
            return list;
        }   
      

  7.   

    public String test3(String arg0) {
    List<ATreeClass> objt= JSonUtil.jsonStrToList(arg0,ATreeClass.class);
    List<ATreeClass> rslist=new ArrayList<ATreeClass>();
    actJson(objt,rslist);   
      return "";
    }  private void actJson(List<ATreeClass> items,List<ATreeClass> rslist){
      for(ATreeClass o:items){
      

  8.   

    可以用ext的树组建,树的数据就来自一个list,返回的可以是object的数组,在转成list