2016-11-10 121 views
2

我正在尝试编写一个从json文件中删除对象的函数。 json文件格式化为一组用户,例如:从JSON文件中删除JSON对象

{ 
    "users": [ 
    { 
     "username": "test1", 
     "answers": [ 
     "Red", 
     "Blue", 
     "Yellow", 
     "Green" 
     ] 
    }, 
    { 
     "username": "test2", 
     "answers": [ 
     "1", 
     "2", 
     "3", 
     "4" 
     ] 
    } 
    ] 
} 

我写的代码由于某种原因而不起作用。我希望能够将一个变量“test2”传递给函数,然后让该特定用户从对象中移除,包括他们的答案。

var removeUser = user; 
var data = fs.readFileSync('results.json'); 
var json = JSON.parse(data); 
var users = json.users; 

delete users.users[user]; 

fs.writeFileSync('results.json', JSON.stringify(json, null, 2)); 

回答

2

您可以使用filter删除用户,你不想

var fs = require('fs'); 
var removeUser = "test2"; 
var data = fs.readFileSync('results.json'); 
var json = JSON.parse(data); 
var users = json.users; 
json.users = users.filter((user) => { return user.username !== removeUser }); 
fs.writeFileSync('results.json', JSON.stringify(json, null, 2)); 
1

您的用户没有键入名称,他们在数字索引数组中。你必须使用delete users.users[1],或更好的,使用.splice()

如果你想删除基于用户名,你将不得不循环。

users.users.forEach((user, index) => { 
    if (user.username === 'test2') { 
    users.users.splice(index, 1); 
    } 
}); 

对于任何更复杂的事情,考虑像TaffyDB这样的客户端数据库。