繁体   English   中英

无法输出JSON

[英]Can't get JSON to output

首先尝试使用JSON。 我有一个返回JSON对象的ajax / php函数。 回到js端,我可以看到对象并将其输出到div。 看起来不错。 我可以将其打印到控制台,看起来仍然不错。 但是,当我尝试对其进行迭代并公开各个值时,我只是在控制台中得到“未定义”。 我不知道我想念的是什么。 抱歉,如果有明显的提示,但我看不到。 谢谢!

var jsonObj = JSON.parse(xmlhttp.responseText);
console.log(jsonObj);   //<--looks perfect
console.log(jsonObj.length);
document.getElementById("rightsidebox").innerHTML=response; //<--looks good
for (var group in jsonObj) {
    //each of these generates 'undefined' WHY???
    //I get 4 'undefined' outputs for each group, so I know that my loop is iterating correctly
    console.log(group.id);
    console.log(group.day);
    console.log(group.time);
    console.log(group.name);  
}

编辑:这是我的ajax调用返回的JSON对象之一的示例。 在此示例中,数组内部只有一个对象。 当然,通常会有多个对象:

[{“ id”:“ 7”,“ day”:“ Thursday”,“ time”:“ 7:00 am”,“ name”:“ Sub 10:00”}]

编辑2:给定此数组,我不得不问JSON的意义是什么。 我可以返回此数组,而无需PHP用JSON格式对其进行编码。 因此,如果返回的只是一个javascript数组,那我完成了什么? 为什么不跳过PHP中的JSON编码,然后遍历数组呢? 显然这是有原因的,因此我显然缺少了一些东西。 有没有更好的方法来完成我要完成的工作? 谢谢!

考虑以下:

var myJson = '{"groupA": {"id": 123, "name": "foo"}}';
var myObj = JSON.parse(myJson);
for (var i in myObj) {
    console.log(i);
    console.log(i.id);
    console.log(myObj[i].id);
}

这里的预期输出是:

myGroup
undefined
123

这是因为循环只是将对象的“键”分配给值i 如果要迭代array而不是对象,则将获得索引而不是字符串。

在给出的示例JSON中,您有一个数组其中包含一个对象 如果您打算在数组中包含多个对象,则如下所示会更好:

for (var group in jsonObj) {
  var thisGroup = jsonObj[group];
  thisGroup.id; // Etc etc..
}

如果您具有正确的jsonObj,并且您说了做到这一点,则可以使用格式化以易于阅读的形式输出对象。 您不必遍历它。

console.log(JSON.stringify(jsonObj, null, 1));

不知道为什么这行得通,当我的原始for (var group in jsonObj)循环不起作用时,但是无论如何...

for (var i=0; i < jsonObj.length; i++) {
    console.log(jsonObj[i].id);
    console.log(jsonObj[i].day);
    console.log(jsonObj[i].time);
    console.log(jsonObj[i].name);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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