106 votes

Comment mettre à jour une valeur dans un fichier json et l'enregistrer via node.js ?

Comment mettre à jour une valeur dans un fichier json et l'enregistrer via node.js ? J'ai le contenu du fichier :

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

Maintenant, je veux changer la valeur de val1 et l'enregistrer dans le fichier.

171voto

Seth Points 1366

Faire cela de manière asynchrone est assez facile. C'est particulièrement utile si vous êtes préoccupé par le blocage du fil de discussion (probable). Sinon, je suggère la réponse de 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);
});

L'inconvénient est que le json est écrit dans le fichier sur une seule ligne et n'est pas prétérité. ex :

{
  "key": "value"
}

sera...

{"key": "value"}

Pour éviter cela, il suffit d'ajouter ces deux arguments supplémentaires à l'option JSON.stringify

JSON.stringify(file, null, 2)

null - représente la fonction de remplacement. (dans ce cas nous ne voulons pas modifier le processus)

2 - représente les espaces à indenter.

56voto

Peter Lyons Points 47794
//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));

6voto

Apoorva Shah Points 342
// read file and make object
let content = JSON.parse(fs.readFileSync('file.json', 'utf8'));
// edit or add property
content.expiry_date = 999999999999;
//write file
fs.writeFileSync('file.json', JSON.stringify(content));

5voto

satej sarker Points 121

En plus de la réponse précédente, ajoutez le répertoire du chemin du fichier pour l'opération d'écriture

 fs.writeFile(path.join(__dirname,jsonPath), JSON.stringify(newFileData), function (err) {}

2voto

Spankied Points 58

Pour ceux qui cherchent à ajouter un élément à une collection json

function save(item, path = './collection.json'){
    if (!fs.existsSync(path)) {
        fs.writeFile(path, JSON.stringify([item]));
    } else {
        var data = fs.readFileSync(path, 'utf8');  
        var list = (data.length) ? JSON.parse(data): [];
        if (list instanceof Array) list.push(item)
        else list = [item]  
        fs.writeFileSync(path, JSON.stringify(list));
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X