Я пытаюсь обновить элементы, хранящиеся в файле JSON, в Express App. В основном я читаю содержимое файла JSON, обновляющего элемент, полученный с помощью идентификатора, и записывая в файл обновленный элемент. Проблема? Это добавление обновленного элемента, поэтому я получаю дубликат. Я не вижу, где ошибка?Найти и заменить элементы в файле Json
posts.json:
[
{
"name": "first name",
"description": "test first description",
"slug": "first-name",
"id": "2f065d59"
},
{
"name": "second name",
"description": "test second description",
"slug": "second-name",
"id": "0071b034"
}
]
создания-обновления-delete.js:
var express = require('express');
var Creatordb = require('./database/posts.json');
var fs = require('fs');
var uuid = require('node-uuid');
var _ = require('lodash');
//Create The Item
var add = function (item) {
var id = uuid.v4();
item.id = id;
Creatordb[item.id] = item;
var outputFilename = './database/posts.json';
function appendObject(obj){
var configFile = fs.readFileSync(outputFilename);
var config = JSON.parse(configFile);
config.push(obj);
var configJSON = JSON.stringify(config, null, 4);
fs.writeFileSync(outputFilename, configJSON);
}
appendObject(item);
};
//Get The Item by Id
var getById = function (id) {
for(var i=0;i<Creatordb.length;i++) {
var id = Creatordb[i].id;
}
return id;
};
//Update The Item
var update = function (item) {
var outputFilename = './database/posts.json';
var configFile = fs.readFileSync(outputFilename);
var config = JSON.parse(configFile);
//using lodash??
var index = _.indexOf(config, _.find(config, item));
config.splice(index, 1, item);
var configJSON = JSON.stringify(config, null, 4);
fs.writeFileSync(outputFilename, configJSON);
};
Если я обновить предмета у posts.json будет выглядеть это:
[
{
"name": "first name",
"description": "test first description",
"slug": "first-name",
"id": "2f065d59"
},
{
"name": "second name edited",
"description": "test second description edited",
"slug": "second-name-edited",
//this id disappeared "id": "0071b034"//
}
]
Теперь с lodash Идентификатор в обновленном элементе ушел? Может ли кто-нибудь объяснить? - Спасибо
Сказав это, он уверен, выглядит как то, что он делает бы легче, если его структура данных была основана на пункт идентификаторами, а не индекс. – Paul
Спасибо за ваш ответ Festo Но как добавить обновленный элемент в массив без нажатия? –
обновление индекса config [index] = item индекс должен быть индексом элемента.вы можете сканировать для него с помощью цикла for или сохранить его до того, когда вы его получите. – Alon