1. 程式人生 > >java生成json時產生棧溢位錯誤問題的解決

java生成json時產生棧溢位錯誤問題的解決

環境:

java + hibernate +html

本來,java中使用json事件很正常的事,但小心有的地方有點“坎兒”

比如,在java中建立了json物件想傳到前臺去:

List<Comment> commentsList = commentMng.findByArticleId(articleid);

JSONArray jsonMembers = new JSONArray(commentsList);
...

注意這裡,得到了一個關於Commentlist陣列commentsList。如果Comment型別中的成員變數,都是普通的成員變數,那麼ok,這麼操作沒問題。

如果Comment型別的表中包含外來鍵,而Comment本身又與該外來鍵對應的變數是多對一的關係,比如Comment中有個Article欄位,多個Comment變數可以對應一個Article變數。那麼在這種情況下:

JSONArray jsonMembers = new JSONArray(commentsList);

這裡會出現棧溢位錯誤

 java.lang.StackOverflowError

在這種情況下,解決的辦法就是將原有的List型別的list分解,也就是將commentsList分解,單獨將變數傳進JSONArray

JSONArray jsonMembers = new
JSONArray(); for ( Comment comment : commentsList) { JSONObject jsonObject = new JSONObject(); jsonObject.put("id", blogComment.getId()); ... ... jsonMembers.put(jsonObject); }

當然那個多對一的欄位資訊如果想傳遞進去,也是不能直接將Comment型別的變數放到jsonObject裡面的,而是需要字串化,總之專遞的儘量是字串資訊。