2017-10-19 80 views
0

我正在使用Socket.io和Node.js处理记分牌。现在我想将参与者的分数保存到JSON文件中。如何使用Node.js和Socket.io将键+值写入JSON文件

这就是我试图做的:

socket.on('part score', function(name, score){ 
    let jdata = fs.readFileSync('participants.json'); 
    let json = JSON.parse(jdata); 
console.log(name, score); 
//outputs: foo 10 

    fs.writeFile('participants.json', JSON.stringify(json.jury1.push({name: score}, null, 2)), function(){ 
     console.log("name added: "+name+" value added: "+score); 
    }); 
}); 

如何我的JSON文件看起来像:

{"jury1": []} 

当我执行上面的代码我的JSON文件变成了分数时“3”是10.我的JSON文件中的所有内容在执行后都消失了。

如何正确地将键+值添加到我的Jury1中? 已经感谢!
ps:名称和分数通过客户端双面脚本发送

回答

0

jury1是一个数组吗?

我认为你应该解析所有你想要做的所以不是数据:

JSON.stringify(json.jury1.push({name: score}, null, 2)

尝试类似:

jury1 with the score you need var data = JSON.stringify(jury1)

+0

它没有工作,对不起 – Sylent

+0

作为@aega说'jury1'必须是一个对象,而不是一个JSON字符串 –

+0

但我想把对象+值放入Jury1中 – Sylent

0

你已经有一个JSON文件。你为什么又要做一个JSON.parse?我怀疑是这个问题。你可以尝试打印json.jury1的内容以确认相同吗?

此外,检查fs.writeFile()的结果,如果有任何犯错

fs.writeFile('participants.json', JSON.stringify(json.jury1.push({name: score}, null, 2)), function(err){ 
    console.log(err, "name added: "+name+" value added: "+score); 
}); 
+0

我以为你必须先解析JSON文件,然后再次对其进行重新设置? – Sylent

+0

仅当您的初始文件内容是字符串'{“jury1”:[]}'而不是json {“jury1”:[]} – aega

相关问题