繁体   English   中英

努力从PHP解释JSON数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM