通过JavaScript迭代/解析JSON对象

我遇到了jQuery / Ajax / JSON的问题。 我正在使用jQuery ajax这样的post……

$.ajax({ type: "POST", dataType: "json", url: "someurl.com", data: "cmd="+escape(me.cmd)+"&q="+q+"&"+me.args, success: function(objJSON){ blah blah... } }); 

我的理解是,这将返回一个JavaScript JSON对象? ajaxpost产生的文本就是这个(我相信这是有效的JSON)…

 { "student":{ "id": 456, "full_name": "GOOBER, ANGELA", "user_id": "2733245678", "stin": "2733212346" }, "student":{ "id": 123, "full_name": "BOB, STEVE", "user_id": "abc213", "stin": "9040923411" } } 

我似乎无法弄清楚如何解析jQuery ajaxpost返回的JSON对象…基本上我想循环并让每个学生返回一个div,就像这样……

 $("
" + student.full_name + " (" + student.user_id + " - " + student.stin + ")
")

我似乎无法弄清楚如何做到这一点……

请帮忙! 谢谢!

您的JSON对象不正确,因为它具有多个具有相同名称的属性。 你应该返回一组“学生”对象。

 [ { "id": 456, "full_name": "GOOBER ANGELA", "user_id": "2733245678", "stin": "2733212346" }, { "id": 123, "full_name": "BOB, STEVE", "user_id": "abc213", "stin": "9040923411" } ] 

然后你可以迭代它:

  for (var i = 0, len = objJSON.length; i < len; ++i) { var student = objJSON[i]; $("
" + student.full_name + " (" + student.user_id + " - " + student.stin + ")
")... }

JSON有一个问题 – 外部花括号应该是方括号,因为你想要一个列表,而不是一个地图(又名对象)。 如果映射中的所有对象具有相同的键,则它将无法正确解析 – 最后一个值将覆盖大多数解析器下的前一个值。

你要:

 [ { "id": 456, "full_name": "GOOBER, ANGELA", "user_id": "2733245678", "stin": "2733212346" }, { "id": 123, "full_name": "BOB, STEVE", "user_id": "abc213", "stin": "9040923411" } ] 

或者是具有不同键的地图:

 { "456":{ "id": 456, "full_name": "GOOBER, ANGELA", "user_id": "2733245678", "stin": "2733212346" }, "123":{ "id": 123, "full_name": "BOB, STEVE", "user_id": "abc213", "stin": "9040923411" } } 

你最好使用$ .getJSON,这是$ .ajax的专用版本。

 $.getJSON("someurl.com", function(students) { $.each(students, function() { $("
" + student.full_name + " (" + student.user_id + " - " + student.stin + ")
").appendTo($container); }); });

您当前的JSON将无法工作,因为第二个“学生”有效地替换了第一个,因为这些只是对象中的属性。

如果您可以控制JSON输出,请将其更改为:

 { "student":[{ "id": 456, "full_name": "GOOBER, ANGELA", "user_id": "2733245678", "stin": "2733212346" },{ "id": 123, "full_name": "BOB, STEVE", "user_id": "abc213", "stin": "9040923411" }] } 

然后你有一个可以循环的数组:

 for(var i=0; i 
 var data = '[ { "id": 456, "full_name": "GOOBER, ANGELA", "user_id": "2733245678", "stin": "2733212346" }, { "id": 123, "full_name": "BOB, STEVE", "user_id": "abc213", "stin": "9040923411" } ]'; $.each(data, function(index, val) { alert(val.id); alert(val.full_name); alert(val.user_id); alert(val.stin); })