我在使用fastjson.jar包
1. jsonarray,jsonobject使用正确的代码如下: ()该getJSONObject函数形成jsonobj的方式非常好,可以避免循环引用和jsonobj后盖前的) ) ) )。
http://www.Sina.com/viewplaincopypublicjsonarraygetjsonarray () { 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 ) ); returnjsonarray; } publicjsonobjectgetjsonobj (字符串名称,字符串值) jsonobjectjsonobj=newjsonobject ); Jonobj.put(name,value ); returnjsonobj; }
在此处使用jsonarray可能会发生错误。 wrong代码如下:
33558 www.Sina.com/viewplaincopyjsonarrayjsonarray=newjsonarray (; jsonobjectjsonobj=newjsonobject (; 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方法返回到前端
33558 www.Sina.com/viewplaincopydoget ()//后端将jsonobject或jsonarray推送到前端时response.getWriter ).write }
3 .对于3. JSON.toJSONString (),将出现$ref
解决方案是在选项DisableCircularReferenceDetect中禁止循环引用检测
代码:
33558 www.Sina.com/viewplaincopyjson.tojsonstring (JSON array,串行化器feature.disablecircularreferencedetect ) )