довольно новый для узла и имеет проблему с добавлением данных в файл JSON. У меня есть файл JSON, который загружается нормально, и данные записываются в него, но, похоже, он добавляется в конец файла, вызывая ошибку форматирования.
Как мне загрузить файл JSON и добавить данные «ts»? Любая помощь приветствуется.
var ts = {
map_id: 4,
time: 23456756,
date: 'Dec342020',
energy: 4.1
}
var fs = require ("fs");
var data = fs.readFileSync('dataNov20_daily.json');
var result = JSON.parse(data);
// result.push(ts)
console.info(result);
var data2 = JSON.stringify(ts);
fs.appendFile('dataNov20_daily.json', ',' + data2, finished)
function finished(err) {
console.info('all set!');
}
Результат файла JSON, в котором данные записываются в самый конец, вызывая ошибку форматирования:
{
"items": ["Data", {
"map_id": 1,
"time": 1606348800000,
"date": "Nov262020",
"energy": 29.2
},
{
"map_id": 1,
"time": 1606435200000,
"date": "Nov272020",
"energy": 26.2
}
]
}[{"map_id":4,"time":23456756,"date":"Dec342020","energy":4.1}]
Вы можете прочитать содержимое файла с помощью функции readFileSync. затем передайте его функции JSON.parse, чтобы получить объект JSON, хранящийся в вашем файле.
Я предполагаю, что ваши данные выглядят так, поправьте меня, если я ошибаюсь
Фактические данные файла:
{
"items": [
{
"map_id": 4,
"time": 1607472000000,
"date": "Dec092020",
"energy": 4.8
},
{
"map_id": 4,
"time": 1607558400000,
"date": "Dec102020",
"energy": 4.4
}
]
}
Вы можете переписать это так:
var ts = {
map_id: 4,
time: 23456756,
date: 'Dec342020',
energy: 4.1
}
var fs = require("fs");
var data = fs.readFileSync('dataNov20_daily.json');
var result = JSON.parse(data);
var uppendedData = (result && (result.items instanceof Array)) ? [...result.items, ts] : [ts];
result["items"] = uppendedData;
fs.writeFileSync('./dataNov20_daily.json', JSON.stringify(result));
function finished(err) {
console.info('all set!');
}
можете ли вы обновить, как ваши данные выглядят в файле, таким образом, я могу вам помочь
Еще раз спасибо @kgangadhar. Как и в моем комментарии выше, добавленный объект «ts» добавляется в самый конец файла json, вызывая ошибку конца файла. Вы понимаете, что я имею в виду под ошибкой?
Извините, см. обновленный вопрос по запросу. Теперь он содержит весь файл json.
Я бы посоветовал использовать очень удобный модуль lowdb, который дает вам огромную гибкость при работе с файлами .json.
Вы можете запрашивать, фильтровать, сортировать, в основном все, что позволяет lodash.
Добавить еще одну запись в файл .json очень просто:
const low = require('lowdb')
const FileSync = require('lowdb/adapters/FileSync')
const dbFileName = "energy.json";
const adapter = new FileSync(dbFileName)
const db = low(adapter)
const ts = {
map_id: 4,
time: 23456756,
date: 'Dec342020',
energy: 4.1
}
// Add another entry
db.push(ts).write()
// Get all entries before 1607558400000 (example of querying)
let entries = db.filter(row => row.time < 1607558400000).value();
console.table(entries);
Я предполагаю, что energy.json выглядит так:
[
{
"map_id": 4,
"time": 1607472000000,
"date": "Dec092020",
"energy": 4.8
},
{
"map_id": 4,
"time": 1607558400000,
"date": "Dec102020",
"energy": 4.4
}
]
В будущем мне нужно будет изучить дополнительные модули, спасибо, что поделились.
О да, действительно, это может быть излишним для вашей непосредственной проблемы, но имейте это в виду!
Спасибо, файл представляет собой объект json. Когда я пытаюсь использовать метод push, я получаю сообщение об ошибке, в котором говорится, что result.push не является функцией,