2016-11-10 4 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.

Смежные вопросы