[英]Javascript - Running through JSON object using for loop
我是JS的新手,正在尝试遍历以下JSON:
myLogger - myLogger - JSON ARRAY - {"dummmysetsJSONArr":[{"entryID":"1","distance":"100","calories":"50"},{"entryID":"2","distance":"200","calories":"100"},{"entryID":"3","distance":"300","calories":"150"},{"entryID":"4","distance":"400","calories":"200"},{"entryID":"5","distance":"500","calories":"250"},{"entryID":"6","distance":"600","calories":"300"}],"success":1}
但我的控制台行继续打印:
myLogger-未定义-未定义-未定义
我已经看到诸如此类的成功解决方案, 这些解决方案似乎对我不起作用。
我的for循环尝试如下:
for (var key in jsonarry) {
if (jsonarry.hasOwnProperty(key)) {
myLogger(jsonarry[key].entryID + " - " + jsonarry[key].distance + " - " + jsonarry[key].calories);
}
}
/*
for (var key in jsonarry) {
if (jsonarry.hasOwnProperty(key)) {
myLogger(jsonarry[0].entryID + " - " + jsonarry[1].distance + " - " + jsonarry[2].calories);
}
}
*/
这是我完整的JS:
google.load("visualization", "1", {packages:["corechart"]});
google.setOnLoadCallback(drawVisualization);
function drawVisualization() {
var req = false;
var jsonarry;
try {
// most browsers
req = new XMLHttpRequest();
myLogger("myLogger - XMLHttpRequest() created");
} catch (e){
// IE
try{
req = new ActiveXObject("Msxml2.XMLHTTP");
myLogger("myLogger - req = new ActiveXObject(Msxml2.XMLHTTP);");
} catch (e) {
// try an older version
try{
req = new ActiveXObject("Microsoft.XMLHTTP");
myLogger("myLogger - req = new ActiveXObject(Microsoft.XMLHTTP);");
} catch (e){
}
}
}
if (!req) {
myLogger("req === false");
} else {
myLogger("req === true");
}
// Use onreadystatechange property
req.onreadystatechange = function() {
//myLogger("myLogger - req.onreadystatechange = function(){");
if(req.readyState == 4) {
myLogger("myLogger - req.readyState == 4");
if(req.status === 200) {
myLogger("myLogger - req.status === 200");
jsonarry = req.responseText;
myLogger("myLogger - JSON ARRAY - " + jsonarry);
myLogger(" ------------- ");
var obj = JSON.parse(jsonarry);
myLogger("jsonarry.length == " + jsonarry.length);
for (var key in jsonarry) {
if (jsonarry.hasOwnProperty(key)) {
myLogger(jsonarry[key].entryID + " - " + jsonarry[key].distance + " - " + jsonarry[key].calories);
}
}
/*
for (var key in jsonarry) {
if (jsonarry.hasOwnProperty(key)) {
myLogger(jsonarry[0].entryID + " - " + jsonarry[1].distance + " - " + jsonarry[2].calories);
}
}
*/
} else {
myLogger("myLogger - req.status == " + req.status);
}
//return req.status === 200 ? success(req.responseText) : error(req.status)
} else {
myLogger("myLogger - req.readyState != 4 i.e. req.readyState === " + req.readyState);
}
}
req.open("GET", 'http://www.dummyurl/dbread.php', true);
req.send(null);
}
function myLogger(content) {
if (window.console && window.console.log) {
console.log("myLogger - " + content);
}
}
您正在解析JSON字符串,而不是遍历解析的值,而是遍历JSON strring。
var obj = JSON.parse(jsonarry);
myLogger("jsonarry.length == " + jsonarry.length);
for (var key in jsonarry) {
if (jsonarry.hasOwnProperty(key)) {
myLogger(jsonarry[key].entryID + " - " + jsonarry[key].distance + " - " + jsonarry[key].calories);
}
}
如下使用。
var obj = JSON.parse(jsonarry);
myLogger("jsonarry.length == " + jsonarry.length);
for (var key in obj) {
if (jsonarry.hasOwnProperty(key)) {
myLogger(jsonarry[key].entryID + " - " + jsonarry[key].distance + " - " + jsonarry[key].calories);
}
}
但是,为什么要遍历对象? 您需要遍历该对象内部的数组,对吗?
您需要处理分配给obj
的已解析JSON结果,而不是jsonarry
中的原始JSON文本。
另外, "dummmysetsJSONArr"
是对象数组。
尝试这个:
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
var list=obj[key];
list.forEach(function(item){
myLogger(item.entryID + " - " + item.distance + " - " + item.calories);
});
}
}
也要避免从变量名(例如jsonarry
删除字母,这最终会导致混乱。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.