java生成json時產生棧溢位錯誤問題的解決
阿新 • • 發佈:2018-12-30
環境:
java + hibernate +html
本來,java中使用json事件很正常的事,但小心有的地方有點“坎兒”。
比如,在java中建立了json物件想傳到前臺去:
List<Comment> commentsList = commentMng.findByArticleId(articleid);
JSONArray jsonMembers = new JSONArray(commentsList);
...
注意這裡,得到了一個關於Comment的list陣列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裡面的,而是需要字串化,總之專遞的儘量是字串資訊。