I’m having quite some trouble handling objects and storing them as JSON.
What I’m trying to do is next:
- parse json file
 
var links = JSON.parse([{"user1":{"username":"user1","data":"164"}},{"user2":{"username":"user2","status":0}}]);
- If user1 exists, update the whole object with new data, ELSE create new object
 
  var key     =  dater['username']; //dynamic username strings
  var ACCOUNT =  {
                    username: key,
                    data: value, 
                    status:1
                }
if(links.hasOwnProperty(key)){
   links[key] = ACCOUNT;
   links=JSON.stringify(links);
   fs.writeFile('status.json', links, err => {
       // error checking
       if(err) throw err;
       console.log('Exists.. updating.');
   });
}else{  // ELSE create new entry
       links.push({[key]: ACCOUNT});
       newData= JSON.stringify(links);
       fs.writeFile('status.json', newData, err => {
           // error checking
            if(err) throw err;
             console.log('New user.. creating');
       });
}
As you can probably tell, the above doesn’t work as I’d want it to. I’m used with PHP arrays where I would simply do arrays with keys and directly update them without any ‘if/else’
Advertisement
Answer
const key = dater['username']; //dynamic username strings
const account = {
    username: key,
    data: value,
    status: 1,
};
const matchedItem = links.find((i) => i[key]);
if (matchedItem) {
    matchedItem[key] = account;
} else {
    links.push({ [key]: account });
}
console.log('links:::', links);
fs.writeFile('status.json', JSON.stringify(links), (err) => {
    if (err) throw err;
    console.log('New user.. creating');
});