[英]How to change the value of a JSON file using arithmetics?
對不起,如果標題沒有意義。
基本上,在我的case.JSON
文件中,我有以下內容:
{
"case": 0
}
我想要這樣,當代碼運行時, case
值會增加1
,並且我可以在任何地方分配它(discord.js 示例)在 Rich-embed 中我可以將 caseNumber 放在頁腳/字段/描述中。
我很難讓這有意義,所以任何幫助將不勝感激。
每次重新啟動代碼時,我都想使用 Node FS 將其保存到我的 JSON 文件中,因此我希望它每次都更新它。
這些是我以前的嘗試:
// console.log('Starting...')
var fs = require('fs');
var cases = fs.readFileSync('case.json');
var caseUp = cases + 1;
var translateCases = JSON.parse(caseUp);
var data = JSON.stringify(translateCases)
fs.writeFile('case.json', data, finished);
function finished(err){
console.log('All set.');
}
//////////////////////////////////////////////////// I've tried these 2 seperately ^ v
// console.log(translateCases);
console.log('Starting...')
var caseJSON = require('./case.json');
var caseTest = caseJSON.case[0 + 1]
caseTest = 0;
caseTest += 1;
// caseTestTranslate = JSON.parse(caseTest)
var actualNumber = JSON.stringify(caseTest)
fs.writeFile('case.json', actualNumber, finished)
function finished(err){
console.log('All good.')
}
console.log(caseTest)
你快到了! 仔細查看訂單:
var cases = fs.readFileSync('case.json'); // is a string
var caseUp = cases + 1; // string + number => string, which is not what you wanted
// for this case, you can parse the filecontents first with JSON.parse on the file contents
或者,你在下面的代碼中做了什么
var caseJSON = require('./case.json'); // now caseJSON is directly parsed as an object
// so caseJSON.case contains the value you want to increment
使用這種方法,它看起來像這樣:
var fs = require('fs');
console.log('Starting...')
var caseJSON = require('./case.json');
var caseJSONIncremented = { case: caseJSON.case + 1 }
var fileContent = JSON.stringify(caseJSONIncremented)
fs.writeFile('case.json', fileContent, finished)
function finished(err){
console.log('All good.')
}
Raymonzut 已經為您的第二次嘗試展示了修復方法。 以下是您的第一個注釋:
var fs = require('fs'); var cases = fs.readFileSync('case.json');
首先,在現代 JS 中,通常不推薦使用var
。 可以時使用const
,必要時使用let
。
如果您打算使用 Sync API,您可能希望使用try-catch
來處理打開文件時出現的任何問題。
請注意,現在cases
將保存一個字符串(如果沒有錯誤。)您必須對此結果調用JSON.parse
以返回一個對象。 所以這兩行是亂序的:
var caseUp = cases + 1; var translateCases = JSON.parse(caseUp);
但是你不能只是切換它們,因為你的類型不會排列。 我的建議如下。
var data = JSON.stringify(translateCases) fs.writeFile('case.json', data, finished); function finished(err){ console.log('All set.'); }
我不建議在同一個代碼塊中組合同步和異步 API。
一個(未經測試的)修復看起來像這樣:
const fs = require('fs');
try {
const str = fs.readFileSync('case.json')
const obj = JSON.parse(str)
// This does not change obj, but creates a clone with an updated version of `cases`
const updatedObj = {
... obj
cases: (obj.cases || 0) + 1
}
fs.writeFileSync('case.json' JSON.stringify(updatedObj))
} catch (e) {
// do something here with your error.
}
這允許您的配置對象在以后需要時具有多個屬性,而不僅僅是cases
。
請注意,這不是我解決此問題的方式。 我會使用Promise
或async-await
代碼,而不是fs
的同步或異步樣式。 但這是以類似方式快速解決您的原始問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.