通过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); })