Javascript 使用NodeJS努力以所需格式输出JSON

Javascript 使用NodeJS努力以所需格式输出JSON,javascript,json,node.js,Javascript,Json,Node.js,我有以下JSON: { "boxes" : { "box-1" : { "what": "lose", "opened": false }, "box-2" : { "what": "lose", "opened": false }, "box-3" : { "what": "lose",

我有以下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=uu dirname+'/save.json';
var saveData=fs.readFileSync(保存“utf8”);
如果(保存数据)
重新加载游戏(保存数据);
其他的
askBoxes();
函数重载游戏(保存数据)
{
saveData=JSON.parse(saveData);
box=Object.key(saveData.box).length;

对于(var i=0;i您正在尝试访问

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]);
}
box=Object.key(saveData.box);

for(var i=0;i
saveData.box
不是数组,因此无法使用
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循环
中的框,并且不需要
对象.键


注意:我删除了框编号(在代码中之前是键),如果需要,可以将它们放入数组。

我最终将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
}]

Cameron,我不确定你是否还有问题,但你可以这么做

var tempBoxes = saveData.boxes;
for(var i in tempBoxes){
   console.log(tempBoxes[i]);
}

尝试使用我修改的重新加载游戏功能

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]]);
    }

}
函数重载游戏(保存数据)
{
saveData=JSON.parse(saveData);
box=Object.key(saveData.box);

对于(var i=0;i如何将其重新格式化为数组?我尝试过,但一直将JSON搞乱…@NaeemShaikh是的,我知道:)在看到您对框号的评论之前,我已经创建了该文件。在这种情况下+1
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]]);
    }

}