• 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)  
  • 相关阅读:
    周易:简易、变易、不易
    2018.net面试题汇总
    关于《推荐系统实践》
    设计模式指引
    facebook的工程开发,不得不佩服
    eclipse自动补全的设置
    数据智慧工程师——计算机和人类之间的中间人——如何从数据中获取有价值的知识
    (移动位置社会网络中)LBSN:好友关系对人类活动的影响分析
    加快软件开发速度,eclipse最常用的快捷键
    人生是一对一的搏斗
  • 原文地址:https://www.cnblogs.com/JAYIT/p/6182192.html
Copyright © 2020-2023  润新知