JSONArray的使用


用的是fastjson.jar包

1. jsonarray,jsonobject 使用正確代碼如下:(這種getJSONObject 函數形成jsonobj 的方式非常好,可以避免循環引用或jsonobj 后來的覆蓋前面的)

 

[java]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  1. public JSONArray getJSONArray(){  
  2.     JSONArray jsonarray = new JSONArray();  
  3.     jsonarray.add(getJsonObj("name", "ar.arch.lcalplay"));  
  4.     jsonarray.add(getJsonObj("name", "ar.arch.ticet"));  
  5.     jsonarray.add(getJsonObj("name", "ar.arch.hotl"));  
  6.     jsonarray.add(getJsonObj("name", "ar.arch.surehotel"));  
  7.     return jsonarray;  
  8. }  
  9.   
  10. public JSONObject getJsonObj(String name, String value) {  
  11.     JSONObject jsonobj = new JSONObject();  
  12.     jsonobj.put(name,value);  
  13.     return jsonobj;  
  14. }  

 

 

 

 

其中使用jsonarray可能出現錯誤,wrong代碼如下:

 

[java]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  1. JSONArray jsonarray = new JSONArray();  
  2. JSONObject jsonobj = new JSONObject();  
  3. for(int i=0;i<3;i++){  
  4.     jsonobj.put("task_id", rs.getString("task_id"));  
  5.     jsonobj.put("service_name", rs.getString("service_name"));  
  6.     jsonobj.put("thread_num", rs.getString("thread_num"));  
  7.     jsonobj.put("delay_time", rs.getString("delay_time"));  
  8.     jsonobj.put("last_time", rs.getString("last_time"));  
  9.     jsonarray.add(jsonobj);  
  10. }  

 

答疑:其中正確代碼的第三句是重點,每次都要新new出一個對象,不然循環了三次,其實是一直更新一個對象,jsonarray中存的就是最終被修改的jsonobj。

這就是Java中的一切都是引用的原則,jsonarray雖然add的是Object,但是最終add的是引用,所以要add不同對象,就必須每次new一個新的。

讀了源碼,這里jsonarray是用List實現的,故而推廣到List.add(Object)上,也是一樣,每次add,都要新new一個對象再add。

2.servlet 的 doget 方法返回給前端的方法

 

[java]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  1. doget(){  
  2.     //后端給前端推jsonobject或者jsonarray都可以  
  3.     response.getWriter().write(JSON.toJSONString(jsonobj));  
  4.     response.getWriter().write(JSON.toJSONString(jsonobj));  
  5. }  

 

3. JSON.toJSONString( ) 時會出現  $ref

解決方案是:通過選項 DisableCircularReferenceDetect來禁止循環引用檢測

代碼:

 

[java]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
    1. JSON.toJSONString(jsonarray,SerializerFeature.DisableCircularReferenceDetect)  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM