我有以下JSON:
{
"boxes" : {
"box-1" : {
"what": "lose",
"opened": false
},
"box-2" : {
"what": "lose",
"opened": false
},
"box-3" : {
"what": "lose",
"opened": true
},
"box-4" : {
"what": "win",
"opened": false
},
"box-5" : {
"what": "lose",
"opened": true
},
"box-6" : {
"what": "unknown",
"opened": false
},
"box-7" : {
"what": "lose",
"opened": true
},
"box-8" : {
"what": "lose",
"opened": false
}
}
}当我将它加载到我的应用程序时(我使用的是NodeJS):
var save = __dirname + '/save.json';
var saveData = fs.readFileSync(save, 'utf8');
if(saveData)
reloadGame(saveData);
else
askBoxes();
function reloadGame(saveData)
{
saveData = JSON.parse(saveData);
boxes = Object.keys(saveData.boxes).length;
for(var i=0;i<=boxes;i++)
{
console.log(saveData.boxes[i]);
}
}看,我不得不使用Object.keys来获得长度。我的console.log在for循环中返回未定义的内容。
我通常不需要使用Object.keys来获取JSON文件中某物的长度..。为什么我的console.log不能工作?
感觉JSON格式不正确。也许我根本不需要盒子键,可以把盒子作为数组吗?
发布于 2015-02-04 10:56:52
saveData.boxes是不数组,因此不能直接用length属性找到它的长度。
这就是您需要使用object.keys查找长度的原因,如果您不想这样做,可以将框列表转换为数组。
将您的json更改为:
{
"boxes": [
{
"what": "lose",
"opened": false
},
{
"what": "lose",
"opened": false
},
{
"what": "lose",
"opened": true
},
{
"what": "win",
"opened": false
},
{
"what": "lose",
"opened": true
},
{
"what": "unknown",
"opened": false
},
{
"what": "lose",
"opened": true
},
{
"what": "lose",
"opened": false
}
]
}这样,您就可以在代码中访问for loop中的框,而且您也不需要Object.keys。
注意事项:我删除了方框号(这是代码中之前的键),如果您想要它们,可以将它们放在数组中。
发布于 2015-02-04 10:56:51
你在试图访问
saveData.boxes[0], saveData.boxes[1] and so on.你需要进入:
saveData.boxes["box-1"], saveData.boxes["box-2"] etc你可以用这个:
boxes = Object.keys(saveData.boxes);
for(var i=0;i<boxes.length;i++)
{
console.log(saveData.boxes[boxes[i]);
}发布于 2015-02-04 11:11:39
最后,我将JSON转换为:
[{
"box": "box-1",
"what": "lose",
"opened": false
},
{
"box": "box-2",
"what": "lose",
"opened": false
},
{
"box": "box-3",
"what": "lose",
"opened": true
},
{
"box": "box-4",
"what": "win",
"opened": false
},
{
"box": "box-5",
"what": "lose",
"opened": true
},
{
"box": "box-6",
"what": "unknown",
"opened": false
},
{
"box": "box-7",
"what": "lose",
"opened": true
},
{
"box": "box-8",
"what": "lose",
"opened": false
}]https://stackoverflow.com/questions/28319459
复制相似问题