首先: 下载json-lib 以及与json-lib 相关联的jar 包
昨天在使用jquery 的ajax 功能来和服务器的struts 2 进行交互,设计需要struts 2 的action 建立一个包含多个Map 对象的 Arraylist,并希望将这个ArrayList 转换成json 对象,最后返回到页面的Jquery 代码。Jquery 代码通过对获取的JSon 对象进行解析,并根据Map 的键名获取出 键值。
通常对于不太复杂的JSON 对象生成过程,都会在java 代码中手工敲格式的转换:
List list1=new ArrayList();
for(int i=0;i<size;i++){
Object[] objs=(Object[]) list.get(i);
sb.append("{");
int objlength=objs.length;
for(int j=0;j<objlength;j++){
sb.append("no"+j+":/"");
sb.append(objs[j]);
sb.append("/",");
}
sb.append("}");
if(i<size-1){
sb.append(",");
}
类似于如上的代码段,平时如果只是简单的Json对象通过一定的调试时间还能够写得出来,但是这次的任务我花费了大约1个多小时的时间才弄出来(当然也和JavaScript不不好调试)有关。想到以后的工作中指不定还有更加复杂的JSon对象需要生成,每次都用手工编写调试,太浪费时间了。
BAIDU 了一下,发现有个 json-lib 的jar包能够非常方便地将java中的很多对象都转换成JSon 对象,并且转换的语句非常简单:
int size=list.size();
System.out.println("size--------------------"+size);
List<Map> jsonlist=new ArrayList();
for(int i=0;i<size;i++){
Object[] objs=(Object[])list.get(i);
Map map=new HashMap();
for(int j=0;j<objs.length;j++){
map.put("key"+j, objs[j]);
}
// JSONArray mapJson=JSONArray.fromObject(map);
jsonlist.add(map);
}
jsonArray=JSONArray.fromObject(jsonlist);
最后一句就是java 中包含了多个Map 的ArrayList 转换成JSon!
最后将jsonArray 转换成String
this.theaterString=jsonArray.toString();
并将theaterString 传递给Jquery
为了告诉Struts2 theaterString 是需要传递的JSon 对象,还需要在struts.xml 中进行设置:
<result name="initTable" type="json">
<param name="includeProperties">theaterString</param>
在JQuery中解析 json的代码如下:
function(json){
var data=eval('('+json.theaterString+')');
。。。。。。。。。。。。。。
}
当JSon传递给Jquery 并通过解析之后,json 就成为一个数组,这个数组的每个元素都是Map
贴上我的Jquery 中操作这些数组的代码:
for(var i=0;i<data.length;i++){
var resourceSn = data[i].key0;
var cState = data[i].key1;
var rState = data[i].key2;
var uState = data[i].key3;
var dState = data[i].key4;
var extState = data[i].key5;