我有以下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.key
来获取长度。
我的console.log在for循环中返回undefined。
我通常不必使用Object.keys
来获取JSON文件中的某些内容......为什么我的console.log没有工作?
感觉像JSON格式不正确。也许我根本不需要盒子钥匙而只能将盒子作为阵列?
答案 0 :(得分:2)
您正在尝试访问
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]);
}
答案 1 :(得分:2)
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
。
注意:我删除了盒子编号(在代码之前是键),如果需要,可以将它们放在数组中。
答案 2 :(得分:2)
我最终将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
}]
答案 3 :(得分:1)
Cameron,不确定你是否还有问题,但你可以做到
var tempBoxes = saveData.boxes;
for(var i in tempBoxes){
console.log(tempBoxes[i]);
}
答案 4 :(得分:0)
尝试使用我修改过的reloadGame函数
function reloadGame(saveData)
{
saveData = JSON.parse(saveData);
boxes = Object.keys(saveData.boxes);
for(var i=0;i<=Object.keys(saveData.boxes).length;i++)
{
console.log(saveData.boxes[boxes[i]]);
}
}