JSONArray使用
2015-12-23 12:49
603 查看
用的是fastjson.jar包
1. jsonarray,jsonobject 使用正确代码如下:(这种getJSONObject 函数形成jsonobj 的方式非常好,可以避免循环引用或jsonobj 后来的覆盖前面的)
其中使用jsonarray可能出现错误,wrong代码如下:
答疑:其中正确代码的第三句是重点,每次都要新new出一个对象,不然循环了三次,其实是一直更新一个对象,jsonarray中存的就是最终被修改的jsonobj。
这就是java中的一切都是引用的原则,jsonarray虽然add的是Object,但是最终add的是引用,所以要add不同对象,就必须每次new一个新的。
读了源码,这里jsonarray是用List实现的,故而推广到List.add(Object)上,也是一样,每次add,都要新new一个对象再add。
2.servlet 的 doget 方法返回给前端的方法
3. JSON.toJSONString( ) 时会出现 $ref
解决方案是:通过选项 DisableCircularReferenceDetect来禁止循环引用检测
代码:
1. jsonarray,jsonobject 使用正确代码如下:(这种getJSONObject 函数形成jsonobj 的方式非常好,可以避免循环引用或jsonobj 后来的覆盖前面的)
public JSONArray getJSONArray(){ JSONArray jsonarray = new JSONArray(); jsonarray.add(getJsonObj("name", "ar.arch.lcalplay")); jsonarray.add(getJsonObj("name", "ar.arch.ticet")); jsonarray.add(getJsonObj("name", "ar.arch.hotl")); jsonarray.add(getJsonObj("name", "ar.arch.surehotel")); return jsonarray; } public JSONObject getJsonObj(String name, String value) { JSONObject jsonobj = new JSONObject(); jsonobj.put(name,value); return jsonobj; }
其中使用jsonarray可能出现错误,wrong代码如下:
JSONArray jsonarray = new JSONArray(); JSONObject jsonobj = new JSONObject(); for(int i=0;i<3;i++){ jsonobj.put("task_id", rs.getString("task_id")); jsonobj.put("service_name", rs.getString("service_name")); jsonobj.put("thread_num", rs.getString("thread_num")); jsonobj.put("delay_time", rs.getString("delay_time")); jsonobj.put("last_time", rs.getString("last_time")); jsonarray.add(jsonobj); }
答疑:其中正确代码的第三句是重点,每次都要新new出一个对象,不然循环了三次,其实是一直更新一个对象,jsonarray中存的就是最终被修改的jsonobj。
这就是java中的一切都是引用的原则,jsonarray虽然add的是Object,但是最终add的是引用,所以要add不同对象,就必须每次new一个新的。
读了源码,这里jsonarray是用List实现的,故而推广到List.add(Object)上,也是一样,每次add,都要新new一个对象再add。
2.servlet 的 doget 方法返回给前端的方法
doget(){ //后端给前端推jsonobject或者jsonarray都可以 response.getWriter().write(JSON.toJSONString(jsonobj)); response.getWriter().write(JSON.toJSONString(jsonobj)); }
3. JSON.toJSONString( ) 时会出现 $ref
解决方案是:通过选项 DisableCircularReferenceDetect来禁止循环引用检测
代码:
JSON.toJSONString(jsonarray,SerializerFeature.DisableCircularReferenceDetect)
相关文章推荐
- Javascript 返回上一页
- Javascript 排序数组或对象
- js 多setInterval冲突的解决方法
- js实现动态操作table
- 原生JS 选项卡代码实现
- js五种设计模式说明与示例
- JSP注释常用的有两种:HTML注释和隐藏注释(JSP专有注释)
- JavaScript UTC时间转换
- JavaScript
- 基于JavaScript代码实现pc与手机之间的跳转
- js 屏蔽浏览器右键菜单
- javascript大神修炼记(7)——OOP思想(多态)
- JS--构建自己的函数库之——浏览器兼容问题处理(持续构建中……)
- javascript数据类型(一)
- JSP session与cookie
- js实现去除首尾空格
- Play framework后台处理页面传过来的AJAX-JSON数据并给出响应
- javascript是做什么的
- javascript 变量
- Javascript学习笔记2.1 Javascript与DOM简介