先把代码贴出来先
[code="java"]Map map = new HashMap();
map.put("aaaaaa", "ccccc");
map.put("bbbbbb", "dddddd");
JSONArray json = JSONArray.fromObject(map);
System.out.println(json);
resp.setContentType("application/json,charset=utf-8");
out.print(json.toString());
out.flush();
out.close();[/code]
这个是在servlet里面写的代码,输出的结果是[{"aaaaaa":"ccccc","bbbbbb":"dddddd"}],这个结果跟我在网上看到的结果不一样,按照网上的结果应该是这样的{"aaaaaa":"ccccc","bbbbbb":"dddddd"}。
再看看我在前台的代码吧。[code="java"]
$.getJSON("TestServlet","type=list",function(data){
alert(data[0].aaaaaa);
}
[/code]
我就不懂为什么我输出的结果是加了个最后面的方括号。另我在取值的时候不得不加上一个0,本来data.aaaaaa就一个可以打印ccccc出来的。
还有一个问题就是在我不知道map的key情况下应该怎么去出值啊?
还有一个问题就是在我不知道map的key情况下应该怎么去出值啊?
[code="java"]
$.getJSON("TestServlet","type=list",function(data){
for(var p in data){
alert(data[p]);
}
}
[/code]
[code="java"]
JSONArray json = JSONArray.fromObject(map);
// 这句改成下面这句就是{"aaaaaa":"ccccc","bbbbbb":"dddddd"}。
JSONObject json = JSONObject.fromObject(map); [/code]
[quote]还有一个问题就是在我不知道map的key情况下应该怎么去出值啊?[/quote]
什么意思?
只有当你返回数组json格式的数据时才需要使用JSONArray类,直接返回js对象格式的json时,需要直接使用JSONObject,这里你可以这样:
[code="java"]
JSONObject o = new JSONObject(map);
System.out.println(o);
[/code]
是不是用的struts2框 架,struts2自动调用get*,于是返回的是一个数组对象
首先, 你使用的JSONArray,应该使用JSONObject就可以。
其次, 如果你不想要里面的key,使用遍历将里面的key去掉:
Collection c = hash.values();
Iterator i = c.iterator();
ArrayList a = new ArrayList();
for(String s : i){
a.add(s);
}
JSONObject json = JSONObject.fromObject(a);
这样就ok了。
json有两种基本格式,一种是{}的对象格式。另一种就是[{},{}]对象数组格式。
你使用JSONArray转换的结果当然是对象数组了。
你直接使用JSONObject来转,不要用JSONArray