JSONArray的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSONArray的使用相关的知识,希望对你有一定的参考价值。

用的是fastjson.jar包

1. jsonarray,jsonobject 使用正确代码如下:(这种getJSONObject 函数形成jsonobj 的方式非常好,可以避免循环引用或jsonobj 后来的覆盖前面的)

 

[java] view plain copy
 
 技术分享技术分享
  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
 
 技术分享技术分享
  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
 
 技术分享技术分享
  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
 
 技术分享技术分享
    1. JSON.toJSONString(jsonarray,SerializerFeature.DisableCircularReferenceDetect)  

以上是关于JSONArray的使用的主要内容,如果未能解决你的问题,请参考以下文章

JSONArray和JSONObject的简单使用

JSONObject和JSONArray的基本使用

使用 Java 访问 JSONArray 中项目的成员

JsonArray和JsonObject的使用

使用 Hibernate 从 PostgreSQL 中的 JSONArray 获取对象的问题

使用 JsonReader 解析时 JsonArray 或 JsonObject 为空