我不确定我的 JSON 格式是否正确以访问它


I am not sure if my JSON is properly formatted to access it

这是另一个JSON问题(我总是在数组上挣扎)。

我的PHP代码返回以下JSON结构:

[{"breed":{"msg":"Breed is required","placement":"#breed_error_1","return":"false"}},{"breed":{"msg":"Breed does not exist","placement":"#breed_error_2","return":"true"}}] 

我的PHP代码是:

$breed[]["breed"] = array("msg"=>"Breed is required","placement"=>"#breed_error_1", "return"=>"false");
$breed[]["breed"] = array("msg"=>"Breed does not exist","placement"=>"#breed_error_2", "return"=>"true");  

和 AJAX 代码:

$.ajax({
    type: 'POST',
    cache: false,
    url: "validate_breed",
    data: element+"="+$(elementSelector).val()+"&v="+validateElement,
    context: document.body,
    dataType: 'html',
    success: function(data){
        alert(data);
    }
});

alert(data)发出警报 JSON 结构以进行调试。

如何访问 JSON 对象的品种部分和以下所有索引/键?

> for(item in data)循环应该可以解决问题,还有其他文章

讨论获取值

实际上如何遍历或枚举 JavaScript 对象?

以下是重新格式化的 JSON:

[
   {
      "breed":{
         "msg":"Breed is required",
         "placement":"#breed_error_1",
         "return":"false"
      }
   },
   {
      "breed":{
         "msg":"Breed does not exist",
         "placement":"#breed_error_2",
         "return":"true"
      }
   }
]

您拥有的是一个{}的两个对象的数组[]

首先,您需要执行一个for (var i = 0; i < JSON.length; i++)循环来获取每个对象(其中有 2 个)。

片段:

for (var i = 0, len = JSON.length; i < len; i++){
    thisBreed = JSON[i].breed; //now this == {"msg" : etc etc}
    for (prop in thisBreed) {
        console.log(thisBreed.msg + thisBreed.placement + thisBreed.return);
    }
}

在 FireFox 中使用 console.info,您将能够可视化对象。

确保正确 json 的最简单方法是以您想要的 php tw 方式构建数组,然后在数组上使用 http://php.net/manual/en/function.json-encode.php 以将其发回

下面是 JSFiddle 演示:

例如,如果这是您的输出 JSON 对象,那么您可以使用 for 循环访问每个品种的索引:

var myJSON = [{
    "breed": {
        "msg": "Breed is required",
        "placement": "#breed_error_1",
        "return": "false"
    }},
{
    "breed": {
        "msg": "Breed does not exist",
        "placement": "#breed_error_2",
        "return": "true"
    }}];
for(var i=0;i<myJSON.length; i++){
     console.log(myJSON[i].breed);
}

这将控制台在两个品种中的每一个下输出两个对象

试试这个

for (var i = 0, len = JSON.length; i < len; i++){
  console.log(JSON[i].breed.msg +" - "+ JSON[i].breed.placement +" - "+ JSON[i].breed.return);
}