JSONArray使用

前端之家收集整理的这篇文章主要介绍了JSONArray使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

用的是fastjson.jar包

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

  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. public JSONObject getJsonObj(String name,String value) {
  10. JSONObject jsonobj = new JSONObject();
  11. jsonobj.put(name,value);
  12. return jsonobj;
  13. }



其中使用jsonarray可能出现错误,wrong代码如下:

  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 方法返回给前端的方法

  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来禁止循环引用检测

代码

  1. JSON.toJSONString(jsonarray,SerializerFeature.DisableCircularReferenceDetect)

猜你在找的Json相关文章