从 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)
});
});
您很可能希望您的 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'] );
});
});
}
)}
我在 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)
});
});
您很可能希望您的 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'] );
});
});
}
)}