簡體   English   中英

如何使用算術更改 JSON 文件的值?

[英]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


請注意,這不是我解決此問題的方式。 我會使用Promiseasync-await代碼,而不是fs的同步或異步樣式。 但這是以類似方式快速解決您的原始問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM