[英]Struggling to interpret JSON data from PHP
我正在尝试使用从php_script接收到的数据,该脚本是json_encode'd,但似乎无法正确处理。
这是我正在使用JS的javascript函数:
function dispJSON(items) {
console.log('Raw from PHP:' + items);
var strJSON = JSON.stringify(items);
console.log('Sent from PHP and stringified:' + strJSON);
$('#results').append(strJSON + '<hr>');
var opStr = '';
for (i=0; i<items.length; i++){ //Get each Record
console.log('REC=' + items[i].tostring);
for (var key in items[i]) {
console.log(key + ' => ' + items[i][key]);
}
}
}
这就是控制台所说的。 安慰:
WCIT.html:60 Sent from PHP and stringified:[[{"vehGrpName":"Austin","vehTitle":"Austin A30 (AS3 and AS4)","vehDescrip":"The new look Baby Austin to rival the Morris Minor."}],[{"vehGrpName":"Austin","vehTitle":"Austin A35","vehDescrip":"An improved A30. Better brakes, gearbox and engine."}]]
WCIT.html:64 REC=undefined
WCIT.html:66 0 => [object Object]
WCIT.html:64 REC=undefined
WCIT.html:66 0 => [object Object]
因此,我显然误解了一些基础知识。 我的javascript / json知识非常有限。
我似乎正在得到一个由两个数组组成的一个数组(所有记录)(即每个记录,其中包含记录的json对象)
我的代码显然是垃圾,所以如果有人可以纠正我,我将不胜感激。
谢谢
在dispJSON
函数中,您根本不再使用JSON(这是一种文本数据符号)—某些地方已经为您反序列化了(方便)。 您正在处理结果数组。 从字符串化副本的外观来看,它是一个数组数组,子数组中的每个条目(每个数组只有一个条目)是一个具有各种属性的对象:
[
[
{
"vehGrpName": "Austin",
"vehTitle": "Austin A30 (AS3 and AS4)",
"vehDescrip": "The new look Baby Austin to rival the Morris Minor."
}
],
[
{
"vehGrpName": "Austin",
"vehTitle": "Austin A35",
"vehDescrip": "An improved A30. Better brakes, gearbox and engine."
}
]
]
( jsonlint对于打印漂亮的结构很方便。)
因此,您需要遍历整个子数组并处理每个子数组及其条目( 实时复制 ):
function dispStuff(items) {
var outer, inner, sub, entry;
for (outer = 0; outer < items.length; ++outer) {
sub = items[outer];
for (inner = 0; inner < sub.length; ++inner) {
entry = sub[inner];
console.log("Entry " + outer + "," + inner + ":");
console.log("vehGrpName = " + entry.vehGrpName);
console.log("vehTitle = " + entry.vehTitle);
console.log("vehDescrip = " + entry.vehDescrip);
}
}
}
或者,如果您不想在代码中包含输入键( 实时复制 ):
function dispStuff(items) {
var outer, inner, sub, entry, name;
for (outer = 0; outer < items.length; ++outer) {
sub = items[outer];
for (inner = 0; inner < sub.length; ++inner) {
entry = sub[inner];
console.log("Entry " + outer + "," + inner + ":");
for (name in entry) {
console.log(name + " = " + entry[name]);
}
}
}
}
之所以for..in
是因为for..in
循环for..in
对象中的属性名称(及其任何原型对象的属性名称),并且因为您可以通过两种不同的方式引用对象属性:在熟悉的obj.propName
格式(其中propName
是文字)或obj["propName"]
格式(其中属性名称是字符串)。 当然,由于它是一个字符串,因此它可以是任何表达式的结果。
另外:您可能想找出为什么您的PHP代码创建的子数组每个只有一个条目...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.