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

时间:2011-05-11 23:50:18

标签: php javascript json

这是另一个 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 对象的品种部分以及以下所有索引/键?

6 个答案:

答案 0 :(得分:2)

一个for(item in data)循环应该可以解决这个问题,还有其他一些关于获取值的文章

实际上 How do I loop through or enumerate a JavaScript object?

答案 1 :(得分:1)

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

答案 2 :(得分:1)

这是重新格式化的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);
    }
}

答案 3 :(得分:1)

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

答案 4 :(得分:1)

以下是JSFiddle Demo:

例如,如果这是您的输出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);
}

这将控制输出两个品种

中每个品种下的两个对象

答案 5 :(得分:0)

试试这个

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