我在使用fastjson.jar包
1. jsonarray,jsonobject使用正确的代码如下: ()该getJSONObject函数形成jsonobj的方式非常好,可以避免循环引用和jsonobj后盖前的) ) ) )。
publicjsonarraygetjsonarray ((jsonarrayjsonarray=newjsonarray ) ); JSONarray.add(getjsonobj('name、' ar.arch.lcalplay ) ); JonArray.add(getjsonobj('name,' ar.arch.ticet ) ); JSONarray.add(getjsonobj('name,' ar.arch.hotl ) ); JSONarray.add(getjsonobj('name,' ar.arch.surehotel ) ); 返回JSON array; } publicjsonobjectgetjsonobj (string name,String value ) ) jsonobjectjsonobj=newjsonobject ); Jonobj.put(name,value ); 返回JSobj; }
在此处使用jsonarray可能会发生错误。 wrong代码如下:
JSON array JSON array=new JSON array (; JSON对象JSON obj=new JSON object (; for(intI=0; i3; I ) {JSONobj.put(task_id ),RS.getstring ) (task_id ) }; JSONobj.put(service_name ),RS.getstring ) (service_name ); Jonobj.put(Thread_num ),RS.getstring ) (Thread_num ); Jonobj.put(Delay_time ),RS.getstring ) (Delay_time ); jsonobj.put(last_time ),RS.getstring ) (last_time ); JSONArray.add(JSONobj; }
答疑:其中正确代码的第三句是关键,每次都向新的new发出对象。 否则,循环了三次。 其实我一直在更新对象。 存储在jsonarray中的是最终修改的jsonobj。
这就是在java中一切都是参照的原则。 jsonarray是添加的是对象,但最终添加的是引用。 因此,要添加不同的对象,必须为每个new创建新的对象。
读源代码,这里jsonarray是用List实现的,所以扩展到list.add(Object )也一样,每次添加时,新的new对象会被添加一个。
2 .如何将servlet的doget方法返回到前端
即使doget ()//后端将jsonobject或jsonarray推送到前端,response.getWriter ).write (JSON.tojsonstring ) JSONobj ) ) response.getWriter ().write ) JSON.tojsonstring ) JSONobj ); }
3 .对于3. JSON.toJSONString (),将出现$ref
解决方案是在选项DisableCircularReferenceDetect中禁止循环引用检测
代码:
JSON.tojsonstring(JSONArray,序列化器feature.disablecircularreferencedetect ) )。