在js中如何解析JsonObject对象数组?

网络科技 2010-12-28 07:28:34
在后台组装了一个JsonObject对象的数组,传到了前台js中,现要把其解析出来,如何实现?

后台代码大概是这样的:

JsonObject json1 = new JsonObject();
JsonObject json2 = new JsonObject();

json1.addProperty("id", 1);
json1.addProperty("name", "张三");

json2.addProperty("id", 2);
json2.addProperty("name", "李四");

List<JsonObject> list = new ArrayList<JsonObject>();
list.add(json1);
list.add(json2);

return list.toArray();//传到前台js中,可以正常得到对象


前台js中大致想要实现的功能代码如下:

UserAction.getUser(function(result) {
alert(result);//这里可以得到值,提示的信息为:[object Object],[object Object]
alert(result.length);//这里得到的值为2,即数组长度为2,也正确
for (var i = 0; i < result.length; i++)
{
var item = result[i];
alert(item);//这里得到的值为[object Object]也正确
alert(item.name);//这里为何得不到值?即得不到张三与李四呢?提示信息为:undefined }
}



看上以上代码,重点红色部分,应该不难理解,我想得到name属性的值,例子中的方法,值为undefined,显然是不对的了,那要如何得到呢?从后台来看,name确实为其一个属性啊,为何却得不到值呢?对json理解得不是很清楚,向各位大虾指点。多谢。。。。
...全文
23379 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wsh378964342 2012-08-20
  • 打赏
  • 举报
回复
恩学习了
yf191323 2011-07-09
  • 打赏
  • 举报
回复
用firebug看一下就OK了,其实是你的json里面没那个数据而已
{"result"{"result":"true","jsonstr":jsonstr}}
eval("(" + response + ")").result.result = true;
eval("(" + response + ")").result.jsonstr = jsonstr;
就出来了
网络科技 2010-12-29
  • 打赏
  • 举报
回复
感谢各位的参与,问题自己解决的了,
我用了Ext.util.JSON.decode(result)这个方法来转化的
12楼的方法应该也行,但还没去试。
5楼的那个是讲怎么把其它的对象转化为JSONObject对象,也很有点启发。
好了,结了。。
chen8401314 2010-12-29
  • 打赏
  • 举报
回复
alert(item.id);   //用item['id']也行
alert(item.name); //用item['name']也行
chen8401314 2010-12-29
  • 打赏
  • 举报
回复
js和java中的json对象无法互相转换的吧(用struts2可以),可以在java中将对象转换为json字符串,传到js后,再在js中将json字符串转换成json对象

Map map1 = new HashMap();
Map map2 = new HashMap();

map1.put("id", 1);
map1.put("name", "张三");

map2.put("id", 2);
map2.put("name","李四");

List list = new ArrayList();
list.add(map1)
list.add(map2)

Map jsonMap = new HashMap();
jsonMap.put("jsonstr",list); //必须是map对象才能转换成json对象
JSONObject json = JSONObject.fromObject(map); //要用到json-lib-2.3-jdk15.jar
return json.toString();

记得引入json.js

UserAction.getUser(function(result) {
var jsonResult = JSON.parse(result);//如何不行用var jsonResult=JSON.parseJSON(),json版本问题
var resultList = jsonResult['jsonstr'];
for(var one in resultList){
var item= resultList[one];
alert(item.id);
alert(item.name);
}
Go 旅城通票 2010-12-29
  • 打赏
  • 举报
回复
 for (var i = 0; i < result.length; i++) 
{
var item = result[i];
alert(item);//这里得到的值为[object Object]也正确
alert(item.name);
//============加下面的语句测试下item里面有什么属性,怕是你的框架修改过json对象属性什么了的
for(attr in item)alert(attr+'='+item[attr]);
}
}
Mr-Jee 2010-12-28
  • 打赏
  • 举报
回复
js刚拿到这个字符串的时候 不知道你ajax怎么拿数据的
网络科技 2010-12-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cj205 的回复:]
eval("(" + result + ")");
[/Quote]
还是不大清楚这个怎么个用法,这句写在那里呢?js中,还是java中?
Mr-Jee 2010-12-28
  • 打赏
  • 举报
回复
eval("(" + result + ")");
网络科技 2010-12-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cj205 的回复:]
你在转换到result之前 eval了吗
[/Quote]
具体怎么eval?不是很清楚,刚学ext没多久,主要代码差不多就是我贴出来的那些了。
Mr-Jee 2010-12-28
  • 打赏
  • 举报
回复
你在转换到result之前 eval了吗
Jlins 2010-12-28
  • 打赏
  • 举报
回复
给你个 代码

http://tdcq.javaeye.com/blog/840004
网络科技 2010-12-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cj205 的回复:]
你可以打印下你从后台得到的数据么
[/Quote]
可以,直接打印list,数据如下:
System.out.println("list:"+list);

[{"id":1,"name":"张三"},{"id":2,"name":"李四"}]
Mr-Jee 2010-12-28
  • 打赏
  • 举报
回复
你可以打印下你从后台得到的数据么
网络科技 2010-12-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 cj205 的回复:]
item["name"]试试

如果是json数据的话 一般需要eval 但是你既然已经枚举出来了 应该就不是这个问题了
[/Quote]
无效,值还是为undefined
Mr-Jee 2010-12-28
  • 打赏
  • 举报
回复
item["name"]试试

如果是json数据的话 一般需要eval 但是你既然已经枚举出来了 应该就不是这个问题了

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧