您的位置:首页 > 移动开发 > Objective-C

关于JSONArray:JSONArray jsonArray=JSONArray.fromObject(list)不执行!

2016-06-01 13:50 495 查看
【环境】Struts2.1.8&Spring3.0&Hibernate3&JSON2.3。

【JSON相关包】ezmorph-1.0.6.jar,json-lib-2.3-jdk15.jar,morph-1.1.1.jar,morph-sandbox-1.1.1.jar

【具体情况】前台页面中打算实现AJAX联动:第一个下拉选择框中选中省份,第二个下拉选择框中就会列出属于这个省份的所有城市。

具体实现方法:选中省份后,就会触发jquery异步请求,执行Action中的listCity方法,而listCity方法中无非就是查询数据库,根据选择的省份查出属于这个省份的所有城市,然后带到前台显示。而前台ajax需要的是一个数组,而不是一个list。所以就在Action中使用JSON,将封装了所有城市的list变成一个数组:
JSONArray jsonArray=JSONArray.fromObject(list);
那么问题来了:测试的时候,这段代码死活不执行,并且这段代码下面的所有代码也不执行,也不报错!所以list就不能变成数组,所以就不能带到前台!

解决方法】不使用
JSONArray jsonArray=JSONArray.fromObject(list);
来构建数组。

而是手动构建

List<String> cityNameList=new             ArrayList<String>();

for(City c:cityList){

cityNameList.add(c.getName());

}

JSONArray jsonArray = new JSONArray();

for(int i=0;i<cityNameList.size();i++){

JSONObject object=new JSONObject();

object.put("name", cityNameList.get(i));

jsonArray.add(object);

}


使用JSONObject,JSONObject像一个entry,是一个键值对,而JSONArray 像一个数组型的的Map,所以我们就可以循环list,使list的每一个元素都变成一个JSONObject,然后将JSONObject加到JSONArray中。这样一来我们就手动完成了将list转成JSON类型的数组。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  struts