json对象,其中包含多个json对象


json object with multiple json object within it

我有一些PHP,它从MySQL数据库的数据中生成JSON对象

$addressData = mysql_query("SELECT * FROM address WHERE ContactID = $contactID")or  die("<br/><br/>".mysql_error());
while($r = mysql_fetch_assoc($addressData)){
    $rows[] = array('data' => $r);
}
// now all the rows have been fetched, it can be encoded
echo json_encode($rows);

这会生成以下JSON对象:

[
  {"address":
    {"AddressID":"10011","AddressType":"Delivery","AddressLine1":"4 Caerleon Drive","AddressLine2":"Bittern","AddressLine3":"","CityTown":"Southampton","County":"Hampshire","PostCode":"SO19 5LF","Country":"United Kingdom","ContactID":"10011"}},
  {"address":
    {"AddressID":"10012","AddressType":"Home","AddressLine1":"526 Butts Road","AddressLine2":"Sholing","AddressLine3":"","CityTown":"Southampton","County":"Hampshire","PostCode":"SO19 1DJ","Country":"England","ContactID":"10011"}}
]

在Ajax中接收并通过以下程序运行时:

$.each(data, function(key, val) {
  string =string + "Key: " + key + " Value:" + val + "<br />";
});

它打印以下内容:

键:0值:[对象对象]

键:1值:[对象对象]

关于如何访问数据中关键01中的对象,有什么想法吗?

这是因为Object的默认toString实现在连接到String对象时会导致"[Object Object]"。您可以像往常一样访问val对象的字段,例如:

val.data.AddressID

像这样:

$.each(data, function(key, val) {
  string += "Key: " + key + " Value:" + val.data.AddressID + "<br />";
});

请注意,上面循环中的val是JSON代码的{"data":…}部分,这就是为什么您需要指定val.data.来访问其中的部分地址数据。

此外,您可以简单地删除数据嵌套级别,从而得到如下JSON布局:

[
    {"AddressID":"10011","AddressType":"Delivery","AddressLine1":"4 Caerleon Drive","AddressLine2":"Bittern","AddressLine3":"","CityTown":"Southampton","County":"Hampshire","PostCode":"SO19 5LF","Country":"United Kingdom","ContactID":"10011"},
    {"AddressID":"10012","AddressType":"Home","AddressLine1":"526 Butts Road","AddressLine2":"Sholing","AddressLine3":"","CityTown":"Southampton","County":"Hampshire","PostCode":"SO19 1DJ","Country":"England","ContactID":"10011"}
]

使用以下PHP代码:

while($r = mysql_fetch_assoc($addressData)){
    $rows[] = $r;
}

然后,您可以访问循环中的地址数据字段,如下所示:

$.each(data, function(key, address) {
  string += "Key: " + key + " Value:" + address.AddressID + "<br />";
});

我会更改json的布局,您不需要嵌套。尝试:

[
    {"AddressID":"10011","AddressType":"Delivery",...},
]

然后,您可以将返回值迭代为一个数组,其键为=>val,其中val将是对象,因为现在,val是包含您想要的对象的对象。。。