102

json ファイルの値を更新して node.js で保存するにはどうすればよいですか? 私はファイルの内容を持っています:

var file_content = fs.readFileSync(filename);
var content = JSON.parse(file_content);
var val1 = content.val1;

val1今、値を変更してファイルに保存したいと思います。

4

7 に答える 7

163

これを非同期で行うのは非常に簡単です。スレッドのブロックに関心がある場合に特に便利です (おそらく)。そうでなければ、Peter Lyonの答えをお勧めします

const fs = require('fs');
const fileName = './file.json';
const file = require(fileName);
    
file.key = "new value";
    
fs.writeFile(fileName, JSON.stringify(file), function writeJSON(err) {
  if (err) return console.log(err);
  console.log(JSON.stringify(file));
  console.log('writing to ' + fileName);
});

注意点は、json が 1 行でファイルに書き込まれ、整形されていないことです。元:

{
  "key": "value"
}

なる...

{"key": "value"}

これを回避するには、これら 2 つの追加の引数をJSON.stringify

JSON.stringify(file, null, 2)

null- 置換機能を表します。(この場合、プロセスを変更したくありません)

2- インデントするスペースを表します。

于 2015-01-27T16:23:26.153 に答える
53
//change the value in the in-memory object
content.val1 = 42;
//Serialize as JSON and Write it to a file
fs.writeFileSync(filename, JSON.stringify(content));
于 2012-05-21T13:55:18.730 に答える
2

タスク完了後にデータを保存する

fs.readFile("./sample.json", 'utf8', function readFileCallback(err, data) {
        if (err) {
          console.log(err);
        } else {
          fs.writeFile("./sample.json", JSON.stringify(result), 'utf8', err => {
            if (err) throw err;
            console.log('File has been saved!');
          });
        }
      });
于 2020-11-13T19:34:03.850 に答える
2

同期 (ブロッキング) 関数は他の同時操作を保持するため、使用しないことを強くお勧めします。代わりに、非同期の fs.promisesを使用します。

const fs = require('fs').promises

const setValue = (fn, value) => 
  fs.readFile(fn)
    .then(body => JSON.parse(body))
    .then(json => {
      // manipulate your data here
      json.value = value
      return json
    })
    .then(json => JSON.stringify(json))
    .then(body => fs.writeFile(fn, body))
    .catch(error => console.warn(error))

setValue保留中の promise を返すことを思い出してください。.then 関数を使用する、非同期関数内でawait operatorを使用する必要があります。

// await operator
await setValue('temp.json', 1)           // save "value": 1
await setValue('temp.json', 2)           // then "value": 2
await setValue('temp.json', 3)           // then "value": 3

// then-sequence
setValue('temp.json', 1)                 // save "value": 1
  .then(() => setValue('temp.json', 2))  // then save "value": 2
  .then(() => setValue('temp.json', 3))  // then save "value": 3
于 2020-09-27T23:06:05.290 に答える