首页 > 代码库 > JSONArray的使用
JSONArray的使用
用的是fastjson.jar包
1. jsonarray,jsonobject 使用正确代码如下:(这种getJSONObject 函数形成jsonobj 的方式非常好,可以避免循环引用或jsonobj 后来的覆盖前面的)
[java] view plain copy
- 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代码如下:
[java] view plain copy
- 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 方法返回给前端的方法
[java] view plain copy
- doget(){
- //后端给前端推jsonobject或者jsonarray都可以
- response.getWriter().write(JSON.toJSONString(jsonobj));
- response.getWriter().write(JSON.toJSONString(jsonobj));
- }
3. JSON.toJSONString( ) 时会出现 $ref
解决方案是:通过选项 DisableCircularReferenceDetect来禁止循环引用检测
代码:
[java] view plain copy
- JSON.toJSONString(jsonarray,SerializerFeature.DisableCircularReferenceDetect)
JSONArray的使用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。