javascript - 无法获取 JSON 输出

标签 javascript json loops

首先尝试使用 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 a.m.","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。如果您要迭代数组,而不是对象,您将得到索引而不是字符串。

在您给出的示例 JSON 中,您有一个数组,其中有一个对象。如果您打算在数组中包含多个对象,那么这样会更好:

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

关于javascript - 无法获取 JSON 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17678526/

相关文章:

javascript - 重复绘制图像 HTML5

javascript - 从 Javascript 文件获取 JSON 数据

javascript - 如何在 highcharts 中加载外部 json 数据以显示条形图

html - 如何在 SVG 标签上循环 CSS 动画

javascript - Google Chrome 上的结果不可预测

javascript - 大多数中间件(如 compress)不再与 Express 捆绑在一起

javascript - 在 Meteor 中使用复杂的更新选择器进行原子操作

Javascript Object.length 基于最后一个对象的键

开放层中的 Javascript "unspecified error"

javascript - 循环遍历 Google map 的 JSON 数据