JSONArray使用

用的是fastjson.jar包

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)









  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值