通过JavaScript迭代/解析JSON对象

通过JavaScript迭代/解析JSON对象,javascript,json,jquery,parsing,loops,Javascript,Json,Jquery,Parsing,Loops,我对jQuery/Ajax/JSON有问题。我正在使用jQuery ajax帖子,就像这样 $.ajax({ type: "POST", dataType: "json", url: "someurl.com", data: "cmd="+escape(me.cmd)+"&q="+q+"&"+me.args, success: function(objJSON){ blah blah... } }); $("<div id=\"" + st

我对jQuery/Ajax/JSON有问题。我正在使用jQuery ajax帖子,就像这样

$.ajax({
  type: "POST",
  dataType: "json",
  url: "someurl.com",
  data: "cmd="+escape(me.cmd)+"&q="+q+"&"+me.args,
  success: function(objJSON){
    blah blah...
  }
});
$("<div id=\"" + student.id + "\">" + student.full_name + " (" + student.user_id + " - " + student.stin + ")</div>")
我的理解是,这将返回一个JavaScript JSON对象?ajax帖子生成的文本是这样的(我相信这是有效的JSON)

我似乎不知道如何解析jQueryAjax帖子返回的JSON对象。。。基本上,我想循环一下,然后对每个返回的学生做一个div,就像这样

$.ajax({
  type: "POST",
  dataType: "json",
  url: "someurl.com",
  data: "cmd="+escape(me.cmd)+"&q="+q+"&"+me.args,
  success: function(objJSON){
    blah blah...
  }
});
$("<div id=\"" + student.id + "\">" + student.full_name + " (" + student.user_id + " - " + student.stin + ")</div>")
$(“+student.full_name+”(“+student.user_id+”-“+student.stin+”)
我只是不知道怎么做


谢谢

您当前使用的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<objJSON.student.length; i++) {
  ...objJSON.student[i]...
  }

for(var i=0;i您的JSON对象不正确,因为它有多个同名属性。您应该返回一个“student”对象数组

然后您可以对其进行迭代,如下所示:

 for (var i = 0, len = objJSON.length; i < len; ++i) {
     var student = objJSON[i];
     $("<div id=\"" + student.id + "\">" + student.full_name + " (" + student.user_id + " - " + student.stin + ")</div>")...
 }
for(var i=0,len=objJSON.length;i
该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() { 
    $("<div id=\"" + student.id + "\">" + student.full_name + " (" + student.user_id + " - " + student.stin + ")</div>").appendTo($container);
  });
});
$.getJSON(“someurl.com”,函数(学生){
$.each(学生,函数(){
$(“+student.full_name+”(“+student.user_id+”-“+student.stin+”)。附录($container);
});
});

JSON可以拥有相同的密钥(这里是“学生”)吗?如果没有,那么你得到的就不是JSON。啊,是的,
安吉拉·古柏
…小安吉最近怎么样了?她和博比·杜福斯
结过婚吗?你的第一个建议中有一个错误:你仍然有财产名称(“student”)用于数组中的条目。修复后将删除downvote。感谢您的回答,它可以工作!不过只是一个问题…为什么我不能只为(objJSON中的student){}?我试过了,但它不起作用……不管怎样,它还是起作用了。再次感谢。我本以为它会起作用,但我更喜欢使用索引在数组上迭代……这里有一个问题。我相信JSON列表中的每个对象都是一个字典。如果我们在普通Python中使用
some\u dictionary.attribute
,我们会得到一个
AttributeError
。那么它在这里如何有效?它是另一种字典,还是根本不像字典?@SidharthSamant这是JavaScript。在JavaScript中,您可以使用
obj['property']引用对象的属性
obj.property
只要该属性的名称根据JavaScript命名准则是有效的。如果它包含JavaScript名称的非法字符,则仅限于第一个选项。
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);    
})