今天找到了一種新的方法來解決這個問題,hibernate的級聯關係解決了不少麻煩事,但是這種情況下卻添了麻煩。下面我說一下解決的思路:將有級聯關係的類分離,具體分離為剝離了有對映關係屬性的dto,和級聯關係所對映的dto,然後將分離出來的dto放到map中,這樣用json-lib工具轉化的時候就不會有問題了!
舉乙個例子
(上面的是插敘部分,同時也是對下面這種解決方案不足之處的補充)
今天莫名其妙的遇到了這樣的乙個錯誤:net.sf.json.jsonexception: there is a cycle in the....大概的意思也知道,但是由於剛剛使用json,也沒有加以思考直接上網查了一下。原因是這樣的:hibernate的關係對映在級聯查詢的時候會一連串的查詢出與之相關的一系列物件(當然這是在你配置了物件之間的對映關係),json-lib畢竟做到不是怎麼成熟,所以這種形式的資料它還沒辦法解析成json物件,不過它也提供了一種解決方案下面提到。但是這個工具包已經夠可以了,現在我們已經可以把list,map,pojo物件等直接轉換為json物件了!
稍微說了一點廢話,不過也是由於剛剛認識json心裡有點喜悅,下面就來說一下解決的具體辦法,解決方案是這樣
這裡我說明一下這段**的作用,他就是提供了乙個過濾作用,如果遇到關聯的物件時他會自動過濾掉,不去執行關聯關聯所關聯的物件。有可能單獨看這段**不是很容易理解哪呢我貼出我hibernate中的配置關係對映的**幫助理解:
因為在這個類中配置了與user的多對一和與submessage的一對多,查詢的時候會關聯查詢出一系列的非本類物件,導致json-lib轉換失敗。
下面我在捎帶說一下json-lib這個類的作用:它就是專門將pojo轉換為json物件,或將json物件轉換為pojo的。這是它的用法:
1. jsonarray submsgs = jsonarray.fromobject(submessages, config);其中config是可選的,當出現上面的情況是可以配置config引數,如果沒有上面的那種需求就可以直接使用fromobject(obj)方法,它轉換出來的就是標準的json物件格式的資料,如下:
, ...]}
2. jsonobject jtmsg = jsonobject.fromobject(thememessage, config);這是專門用來解析標準的pojo,或者map物件的,pojo物件的格式就不用說了,map的形式是這樣的。當然這是我用到的幾個用法,我也沒有深究,所以說的不對的地方大家多多指教!!
json序列化 反序列化
json序列化 json的dumps方法可以將json格式資料序列為python的相關資料型別,比如str,常用於列印,另外,在序列化時,中文漢字被轉換為unicode編碼,在dumps函式中新增引數ensure ascii false可解決 dumps的indent參考可以調整顯示格式,即縮排,一...
Json序列化和反序列化
json測試 public class jsontest irun 實體序列化和反序列化 string json1 jsonhelper.serializeobject sdudent json1 student sdudent1 jsonhelper.deserializejsontoobject...
json序列化與反序列化
1.什麼是序列化與反序列化?序列化就是將記憶體中的資料結構轉換成一種中間格式儲存到硬碟或者基於到網路傳輸。反序列化就是將硬碟中或者網路中傳來的一種資料格式轉換成記憶體中資料格式。2.為什麼要有序列化和反序列化?1.可以儲存程式的執行狀態。比如遊戲中使用者在某個狀態下線,使用者遊戲的資料需要儲存,這時...