<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ply

    吞噬黑暗
    posts - 1, comments - 11, trackbacks - 0, articles - 13
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
    jQuery調用JSON時,net.sf.json.JSONException: There is a cycle in the hierarchy!

    遇到了一些問題,如hibernate延遲加載錯誤,這都是老掉牙的問題了,一看就知道加個lazy=flase就OK了。想不到快要完成了又遇到了新的問題,JSON死循環,實在讓人郁悶。異常如下:


    net.sf.json.JSONException: There is a cycle in the hierarchy!
            at net.sf.json.util.CycleDetectionStrategy$StrictCycleDetectionStrategy.
    handleRepeatedReferenceAsObject(CycleDetectionStrategy.java:97)
            at net.sf.json.JSONObject._fromBean(JSONObject.java:674)
            at net.sf.json.JSONObject.fromObject(JSONObject.java:181)
            at net.sf.json.JSONArray._processValue(JSONArray.java:2381)
            at net.sf.json.JSONArray.processValue(JSONArray.java:2412)
            Truncated. see log file for complete stacktrace
    >


    仔細查了一下發現是hibernate主外鍵關聯的錯,后來就想下json源代碼下來看,發現大費周章都沒搞到json源碼,還是老辦法反編譯瞅瞅,發現JSONArray根據判斷取得的不同類型調用相應的方法,

    if (object instanceof Collection)
        return _fromCollection((Collection)object, jsonConfig);

    而我從hibernate那得到的是list,所以去調用了_fromCollection方法,而里面的方法發現一個問題:該方法會不斷的拆開實體屬性,直到沒有為止,而我的ContactGroup里有兩個屬性用于自身關聯

    private Set contactGroups = new HashSet(0);
    private Set contactGroupPersons = new HashSet(0);


    也就是說主外鍵自身關聯的是個死循環,那怎么才能不讓他出現這種情況呢,應該有個配置的參數后者終止循環的地方吧,查看發
    現,jsonConfig,呵呵,config應該是配置參數吧,參看JsonConfig看見巨多的屬性,有點暈PropertyFilter
    ,不提了,看了老半天,發現了一個屬性PropertyFilter,PropertyFilter 是一個interface,代碼如下:


    public interface PropertyFilter
    {


    public abstract boolean apply(Object obj, String s, Object obj1);
    }


    也就是說我可以通過這個方法過濾掉List里的相應屬性,只要讓它返回true就可過濾掉,……,有點懸……我們重寫一下這個方法:


    JsonConfig cfg = new JsonConfig();
        cfg.setJsonPropertyFilter(new PropertyFilter()
        {
             public boolean apply(Object source, String name, Object value) {
               if(name.equals("contactGroups")||name.equals("contactGroupPersons")) {
                 return true;
               } else {
                 return false;
              }
            }
           });

    將hibernate產生的實體bean中的contactGroups和contactGroupPersons過濾掉就OK了!

    然后調用JSONArray.fromObject(mychildren,cfg); mychildren是hibernate返回的list。

     

     1List<ShoppingCart> listCarts = sCartServiceImpl
     2                        .ShoppingCartTable(shoppingCart);
     3                // 先過濾對set集合的拆解
     4                JsonConfig config = new JsonConfig();
     5                config.setJsonPropertyFilter(new PropertyFilter() {
     6                    @Override
     7                    public boolean apply(Object arg0, String arg1, Object arg2) {
     8                        if (arg1.equals("shoppingCarts")) {
     9                            return true;
    10                        }
     else {
    11                            return false;
    12                        }

    13                    }

    14                }
    );
    15                // 將數據轉換成Json數據
    16                JSONArray jsonObject = JSONArray.fromObject(listCarts, config);
    17                System.out.println(jsonObject.toString());
    18

    搞了一下午,參考網絡的資料!解決問題了!


    評論

    # re: jQuery調用JSON時,net.sf.json.JSONException: There is a cycle in the hierarchy   回復  更多評論   

    2012-06-26 15:22 by cfm
    請問這個PropertyFilter接口怎么調用啊 我在類上實現這個接口編譯不通過

    # re: jQuery調用JSON時,net.sf.json.JSONException: There is a cycle in the hierarchy   回復  更多評論   

    2012-12-07 13:49 by upup
    @cfm
    你只要把這個接口當成一個參數放到fromObject里面就行了。
    JSONArray jsonObject = JSONArray.fromObject(listCarts, config);

    # re: jQuery調用JSON時,net.sf.json.JSONException: There is a cycle in the hierarchy [未登錄]  回復  更多評論   

    2012-12-11 16:30 by Rose
    太感謝了,我正好碰到這個問題了。

    # re: jQuery調用JSON時,net.sf.json.JSONException: There is a cycle in the hierarchy   回復  更多評論   

    2013-09-16 09:25 by taojie
    請問要在哪里重寫呢?為什么這里老是報這個異常

    # re: jQuery調用JSON時,net.sf.json.JSONException: There is a cycle in the hierarchy   回復  更多評論   

    2013-09-16 09:41 by taojie
    shoppingCarts指的是哪里的屬性還是?

    # re: jQuery調用JSON時,net.sf.json.JSONException: There is a cycle in the hierarchy   回復  更多評論   

    2013-10-25 11:51 by er
    根本就行不通

    # re: jQuery調用JSON時,net.sf.json.JSONException: There is a cycle in the hierarchy   回復  更多評論   

    2013-11-26 14:31 by vf
    vddv

    # re: jQuery調用JSON時,net.sf.json.JSONException: There is a cycle in the hierarchy   回復  更多評論   

    2014-04-17 15:57 by hong0220
    已經解決了,好用啊

    # re: jQuery調用JSON時,net.sf.json.JSONException: There is a cycle in the hierarchy   回復  更多評論   

    2014-05-02 11:01 by @jack
    不錯是那個問題,出現了死循環,只要把實體中相應的屬性過濾掉就OK,頂

    # re: jQuery調用JSON時,net.sf.json.JSONException: There is a cycle in the hierarchy [未登錄]  回復  更多評論   

    2016-03-01 17:13 by monkey
    樓主太給力了,謝謝你的分享,好人一生平安!!!

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 在线A级毛片无码免费真人| 18禁无遮挡无码国产免费网站| 成人免费无码视频在线网站| 亚洲AV本道一区二区三区四区| 精品一区二区三区免费观看| 久久久久无码专区亚洲av| 偷自拍亚洲视频在线观看99| 免费人成视频在线观看视频| 国产成人+综合亚洲+天堂| 国产精品麻豆免费版| 国产成人高清亚洲一区久久| 免费少妇a级毛片| 欧洲精品码一区二区三区免费看| 亚洲国产高清精品线久久| 一级白嫩美女毛片免费| 亚洲一区二区三区无码影院| 成在人线av无码免费高潮水| 国产成人亚洲综合色影视 | 久久精品国产亚洲av天美18 | 毛片基地看看成人免费| 狠狠亚洲婷婷综合色香五月排名| a级毛片免费全部播放无码| 亚洲一区免费观看| 成年美女黄网站色大免费视频| 亚洲综合精品第一页| 免费午夜爽爽爽WWW视频十八禁| 国产免费区在线观看十分钟| 久久亚洲精品国产精品黑人| 中文字幕在线免费观看| 亚洲中文无码永久免费| 亚洲综合亚洲综合网成人| 91精品全国免费观看含羞草| va天堂va亚洲va影视中文字幕| 性做久久久久免费观看| 永久在线观看免费视频| 亚洲午夜精品一区二区公牛电影院| 性感美女视频免费网站午夜 | 午夜一级免费视频| 国产99久久久国产精免费| 亚洲综合久久成人69| 免费一级成人毛片|