如:Person:{String:name,String:gender,Address:adrr},其中adrr是个级联对象
通过json-lib调用JSONArray.fromObject(list)总是提示死循环,只用把所有one-many,many-many的属性过滤掉才可以,可是我想获取对象级联对象的JSON对象,怎么做?

解决方案 »

  1.   

    LZ如不嫌麻烦可以尝试自己拼JSON格式。
    不过我们在JAVA项目中多数也是用LZ这种方法JSONArray.fromObject(),只不过我们多数情况下,是自己定义一个类,类种的属性就是String:name,String:gender,Address:adrr就是自己所需要的数据类型及名称。把类中的所需要的属情初始成自己所需要的值后就直接把这个类放入list中,然后再把list放入JSONArray.fromObject(list),
      

  2.   


    那不是还要重新构造 一个新类?假如我要adrr中的省份属性,得提取出来构造新类吗?
      

  3.   


    那不是还要重新构造 一个新类?假如我要adrr中的省份属性,得提取出来构造新类吗?
      

  4.   

    是不是出现了嵌套循环了,可以把关联表的关联属性去掉:比如
    public User{
    private Address address;

    }public Address{
    private List<User> users;

    }JsonConfig jsonConfig = new JsonConfig();
    jsonConfig.setExcludes(new String[] {  "users","其他"});  
    JSONObject newEntityJson = JSONObject.fromObject(user,jsonConfig);
      

  5.   

    我就是想要级联表的属性,不过退一步想,既然延迟加载了,貌似不可以取到所有级联对象的属性,所有还是绕过这个,自定义了一个JAVA BEAN,选择的时候自定义此对象进行封装,不知道有没有更好的办法,期待中~~~
      

  6.   

    即使想要级联的属性,也不至于a到b,再到a,再到b,再到a......如果你想要a和b的属性,那么你就把b中对a的关联内容过滤掉;
      

  7.   

    和关联单项双向有什么关系吗???也不去改的entity文件,你只需要在生成json的时候,不让他一层一层的连接下去,
    jsonConfig.setExcludes(new String[] {  "users","其他"});  
    看我上面的程序,也许是我理解错你的意思了,或者你理解错我的意思了 :)
      

  8.   

    你都没说清什么关联关系大家就开始讨论了, addr里保存的比如  A:河北省xx市  B:河南省xx市  C:河北省xx市xx镇,你要这么关联?先取到A的地址,你想管理A下的所有镇吗,一定要搞清楚上下级关系for循环才可以有机会推出,要不然当然死循环了。
      

  9.   

    到底死循环发生在什么地方?看你的结构,目前看来应该不会发生死循环,
    你最好把Address结构发出来
      

  10.   

    既想想获取对象级联对象的JSON对象,又不想死循环,,,那就把这个对象复制一份,,就不会级联查询了不要用=,   引用是同一个,还是会有数据库关联的  spring 提供了 BeanUtils.copyProperties()