Mam plik, który przechowuje wiele obiektów JavaScript w postaci JSON i muszę go przeczytać, utworzyć każdy z obiektów i coś z nimi zrobić (w moim przypadku wstawić je do bazy danych). Obiekty JavaScript można przedstawić w formacie:
Format A:
[{name: 'thing1'},
....
{name: 'thing999999999'}]
lub Format B:
{name: 'thing1'} // <== My choice.
...
{name: 'thing999999999'}
Zwróć uwagę, że ...symbol oznacza wiele obiektów JSON. Zdaję sobie sprawę, że mógłbym wczytać cały plik do pamięci, a następnie użyć w JSON.parse()ten sposób:
fs.readFile(filePath, 'utf-8', function (err, fileContents) {
if (err) throw err;
console.log(JSON.parse(fileContents));
});
Jednak plik może być naprawdę duży, wolałbym użyć do tego strumienia. Problem, który widzę w przypadku strumienia, polega na tym, że zawartość pliku może zostać podzielona na fragmenty danych w dowolnym momencie, więc jak mogę używać JSON.parse()na takich obiektach?
Idealnie byłoby, gdyby każdy obiekt był odczytywany jako oddzielny fragment danych, ale nie jestem pewien, jak to zrobić .
var importStream = fs.createReadStream(filePath, {flags: 'r', encoding: 'utf-8'});
importStream.on('data', function(chunk) {
var pleaseBeAJSObject = JSON.parse(chunk);
// insert pleaseBeAJSObject in a database
});
importStream.on('end', function(item) {
console.log("Woot, imported objects into the database!");
});*/
Uwaga, chciałbym zapobiec wczytywaniu całego pliku do pamięci. Efektywność czasowa nie ma dla mnie znaczenia. Tak, mógłbym spróbować odczytać wiele obiektów na raz i wstawić je wszystkie na raz, ale to jest poprawka wydajności - potrzebuję sposobu, który gwarantuje, że nie spowoduje przeciążenia pamięci, bez względu na to, ile obiektów jest zawartych w pliku .
Mogę użyć, FormatAa FormatBmoże czegoś innego, po prostu określ w odpowiedzi. Dzięki!