首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >努力用NodeJS获得所需格式的JSON

努力用NodeJS获得所需格式的JSON
EN

Stack Overflow用户
提问于 2015-02-04 10:50:13
回答 5查看 77关注 0票数 2

我有以下JSON:

代码语言:javascript
复制
{
    "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):

代码语言:javascript
复制
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格式不正确。也许我根本不需要盒子键,可以把盒子作为数组吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-02-04 10:56:52

saveData.boxes数组,因此不能直接用length属性找到它的长度。

这就是您需要使用object.keys查找长度的原因,如果您不想这样做,可以将框列表转换为数组。

将您的json更改为:

代码语言:javascript
复制
{
    "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
EN

Stack Overflow用户

发布于 2015-02-04 10:56:51

你在试图访问

代码语言:javascript
复制
saveData.boxes[0], saveData.boxes[1] and so on.

你需要进入:

代码语言:javascript
复制
saveData.boxes["box-1"], saveData.boxes["box-2"] etc

你可以用这个:

代码语言:javascript
复制
boxes = Object.keys(saveData.boxes);

for(var i=0;i<boxes.length;i++)
{
    console.log(saveData.boxes[boxes[i]);
}
票数 2
EN

Stack Overflow用户

发布于 2015-02-04 11:11:39

最后,我将JSON转换为:

代码语言:javascript
复制
[{
    "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
}]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28319459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档