2017-10-19 82 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

相關問題