【问题标题】:I am not sure if my JSON is properly formatted to access it我不确定我的 JSON 格式是否正确以访问它
【发布时间】:2011-05-11 23:50:18
【问题描述】:

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

【问题讨论】:

  • 如果您的 php 正在输出 JSON,那么您可以在 $.ajax 中指定 dataType: 'json'

标签: php javascript json


【解决方案1】:

for(item in data) 循环应该可以解决问题,周围还有其他文章讨论如何获取值

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

【讨论】:

【解决方案2】:

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

【讨论】:

  • 为了让这个工作成功,我需要做: var myObject = eval('(' + data + ')');显然,对于每个回答我的问题的人给出的所有示例,我都需要使用 eval 。数据类型设置为 JSON,为什么还需要 eval? -丰富
  • 因为传输过来的仍然只是一串文本。它可能恰好看起来像 JSON 或 XML 或其他任何东西,但在某种解析器通过它之前(如 eval() 用于 javascript)它没有任何意义。很抱歉遗漏了这个。 jQuery ajax 可以设置为自动执行,fwiw。
  • 不用担心,亚历克斯。我现在完全明白了:-)
  • @dottedquad 在 php 端,在您将输出回显到 ajax 之前,您是否 json_encode 您的输出数组?
  • 是的,我做到了。我的编码代码是: $this->breed_return = json_encode($breed);
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • function breed_check($str) { $breed = array(); if($str == NULL) { $breed[0]["breed"] = array("msg"=&gt;"Breed is required","placement"=&gt;"#breed_error_1", "return"=&gt;"false"); $breed[1]["breed"] = array("msg"=&gt;"Breed does not exist","placement"=&gt;"#breed_error_2", "return"=&gt;"true"); } $this-&gt;breed_return = json_encode($breed); } 我确实形成了数组,然后做了 json_encode。包含代码sn-p
    【解决方案5】:

    这里是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);
    }
    

    这将控制台输出两个品种下的两个对象

    【讨论】:

    • 我创建了一个新的 .js 文件和 .html 文件来测试您的示例。我现在明白这是如何工作的;但是,当我在我的项目中实现这个示例时,我在 firebug 中收到以下错误:myJSON[i].breed is undefined pastebin.com/KhG6K7V9
    • @dottedquad 你能发布console.log(myJSON)给你的东西吗?
    • 当我实现 var myObject = eval('(' + data + ')');正如 Alex Mcp 解释的那样,“除非某种解析器通过它(例如 eval() 用于 javascript),否则它没有任何意义。”
    【解决方案6】:

    试试这个

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

    【讨论】:

      猜你喜欢
      • 2020-11-02
      • 2020-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多