I’m unable to find a way to remove whole line of JSON data(line) after it’s used.
For some reason delete
is not working or rather said not doing anything.
.JSON
[ {"id":"1","code":"super-S","expires_in":"","gives_currencies":"1.5","gives_items":"","number_of_attempts":"1","attempts_used":""}, {"id":"2","code":"wow!","expires_in":"","gives_currencies":"3","gives_items":"","number_of_attempts":"1","attempts_used":""}, {"id":"3","code":"slashme","expires_in":"","gives_currencies":"4","gives_items":"","number_of_attempts":"1","attempts_used":""}, {"id":"4","code":"randombla","expires_in":"","gives_currencies":"5","gives_items":"","number_of_attempts":"1","attempts_used":""} ]
code
//fs configuration const fs = require('fs'); let rawdata = fs.readFileSync('test.json'); let mycodes = JSON.parse(rawdata); //something above const randomcode = mycodes[Math.floor(Math.random() * mycodes.length)]; console.log('Your code is:', randomcode['code']); //logs me a random code value delete mycodes[randomcode];
The goal here is to select random code, which is done but then I need to remove it from .JSON file so it won’t repeat. I tried several things but it’s not working, delete.randomcode
etc… the line never removed from the .JSON file.
Advertisement
Answer
Use Array.prototype.splice(index, deleteCount) instead of delete
.
delete
, on an Array, will just null
the key, without removing it.
Save back your modified data using JSON.stringify(mycodes)
to that same file.
const fs = require('fs'); const mycodes = JSON.parse(fs.readFileSync('./test.json')); const randomIndex = Math.floor(Math.random() * mycodes.length); const randomObject = mycodes[randomIndex]; console.log('Your code is:', randomObject.code); // Log a random code value mycodes.splice(randomIndex, 1); // Remove one key at randomIndex // Write back to file fs.writeFileSync('test.json', JSON.stringify(mycodes, 0, 4), 'utf8');
If you already have that Object out of your Array, and since Objects are passed by reference (like pointer in memory), make use of the Array.prototype.indexOf(someObject) like:
const fs = require('fs'); const mycodes = JSON.parse(fs.readFileSync('./test.json')); const randomIndex = Math.floor(Math.random() * mycodes.length); const randomObject = mycodes[randomIndex]; // later in your code.... const objIndex = mycodes.indexOf(randomObject); // Get Object index in Array mycodes.splice(objIndex, 1); // Remove it from array at that index // Write back to file fs.writeFileSync('test.json', JSON.stringify(mycodes, 0, 4), 'utf8');