从 PHP 解析 Javascript 中的 JSON

Parse JSON in Javascript from PHP

我在 ajax 响应中传递一个 json 编码字符串给我的 Javascript。当我 console.log json,在 JSON.Parse 之后,它看起来像下面这样:

[
 {"732":
    {
      "doctor_name":"First M. Last ",
      "degree":"MD"
    }
 },
 {"377":
    {
      "doctor_name":"First M. Last ",
      "degree":"MD"
    }
 },
 {"1092":
    {
      "doctor_name":"First M. Last",
      "degree":"DO"
    }
 },
 {"759":
    {
      "doctor_name":"First M. Last",
      "degree":"MD"
    }
  },
  {"1628":
    {
      "doctor_name":"First M. Last",
      "degree":"DO"
    }
   }
] 

我需要在不知道 ID 的情况下访问这些对象中的每一个(在本例中为“732”、“377”、“1092”、“759”等)

不确定我的数据是否结构正确但我什至不能使用 Object.keys(obj) 因为它 returns 非对象错误 属性.

我构建 PHP 数组的方式如下:

 foreach ($doctors as $group){
    $doctor_results[][(int)$group->prac_id]=array(
      'doctor_name' => (string)$group->name,
      'degree' => (string)$group->degree,
    );
  } // end foreach

我希望每个数组id都用作键,不确定这是否有意义。 蒂亚

我非常同意 Marty 和 Six Fingered Man 发表的评论,但如果您想遍历 json,这会起作用:

jQuery.each(obj, function(index, data){
    jQuery.each(data, function(id, fields){
        console.log(id); // returns the ID's of the objects: 732, 377,....etc
        console.log(fields); // returns the fields for each object. (doctor_name & degree)
    });
});

JSFiddle Demo

您很可能希望您的 PHP 看起来像:

 foreach ($doctors as $group){
    $doctor_results[(int)$group->prac_id]=array(
      'doctor_name' => (string)$group->name,
      'degree' => (string)$group->degree,
    );
  } // end foreach

注意缺少的 [],这意味着将一个项目推入数值数组。您的示例中的第二组括号建议 PHP 创建的数字元素应该是一个关联数组,其中包含一个以 'prac_id' 作为键的项目。 PHP 会自动创建该关联数组,创建结构时,您的键嵌套比您想要的更深一层,以便能够通过 'prac_id' 通过 JavaScript 中的简单键访问来获取项目。实际上,您需要像 Darren 的回答中那样的嵌套循环。

    [
 {prac_id:"732",data:
    {
      "doctor_name":"First M. Last ",
      "degree":"MD"
    }
 },...]

foreach ($doctors as $group){
$doctor_results[][(int)$group->{'prac_id'}]=array(
  'doctor_name' => (string)$group->{'data'}->{'name'},
  'degree' => (string)$group->{'data'}->{'degree'},
);

} // 结束 foreach

您的 ajax 响应是 OBJECT 数组。如果您通过 json_encode($array) 对其进行编码,您的 ajax 响应就可以了。您可以在此处查看您的 ajax 回复:http://json.parser.online.fr/

所以我认为您可以修改 ajax 调用。您只需在 ajax 中添加此 dataType: 'json'。它会自动处理您的 JSON 回复。

$.ajax({                                            
  url: 'your_ajax_url',                        
  data: 'data',                                                         
  dataType: 'json',                  
  success: function(data)          
  {   
    $.each(data, function(index, obj){
      $.each(obj, function(id, nested_obj){
        console.log("ID: "+id);
        console.log("doctor name: "+nested_obj['doctor_name']+",degree:"+ nested_obj['degree']  );
      });
    });
  }
)}