tło
Robię eksperymenty z Node.js i chciałbym odczytać obiekt JSON, albo z pliku tekstowego, albo z pliku .js (co jest lepsze?) Do pamięci, aby szybko uzyskać dostęp do tego obiektu z kodu. Zdaję sobie sprawę, że istnieją takie rzeczy jak Mongo, Alfred itp., Ale nie jest to teraz potrzebne.
Pytanie
Jak odczytać obiekt JSON z pliku tekstowego lub pliku js i do pamięci serwera za pomocą JavaScript / Node?
javascript
json
node.js
Matt Cashatt
źródło
źródło
Odpowiedzi:
Synchronizacja:
Asynchronizacja:
źródło
let imported = require("file.json")
. (2) JSON.parse musi być asynchroniczny, ponieważ użyłem tego kodu do załadowania pliku JSON 70mb do pamięci jako obiektu. W ten sposób zabiera to milisekundy, ale jeślirequire()
go użyję , to będzie się dłubał .require
, z tą odpowiedzią nie ma już zastosowania, jeśli chcesz tylko załadować plik JSON. Po prostu używajlet data = require('./yourjsonfile.json')
i gotowe (z przypisem, że jeśli wydajność wymaga wpływa na kod, masz problemy znacznie wykraczające poza „chęć załadowania pliku .json”)Najłatwiejszym sposobem, jaki to zrobiłem, jest po prostu użycie
require
i ścieżka do pliku JSON.Załóżmy na przykład, że masz następujący plik JSON.
test.json
Następnie możesz łatwo załadować to do aplikacji node.js za pomocą
require
źródło
require
w węźle działa synchronicznie. Nurkowania w głębokim tutajtest.json
będzie inna niż jego przykład. Używamnode 5.0
require
uruchomiłby ten kod? Jeśli tak, to naprawdę musisz kontrolować, skąd pochodzą pliki json, w przeciwnym razie osoba atakująca może uruchomić złośliwy kod na komputerze.Asynchroniczny jest z jakiegoś powodu! Rzuca kamień w @mihai
W przeciwnym razie oto kod, którego używał w wersji asynchronicznej:
źródło
Przynajmniej w Node v9.9.1 możesz to zrobić
var json_data = require('/path/to/local/file.json');
i uzyskaj dostęp do wszystkich elementów obiektu JSON.
źródło
file.json
po nowym wymaganiu (bez ponownego uruchamiania programu), dane będą od pierwszego ładowania. Nie mam źródła, aby to poprzeć, ale miałem to w aplikacji, którąW węźle 8 możesz użyć wbudowanego,
util.promisify()
aby asynchronicznie odczytać taki plikźródło
.readFile
jest już asynchroniczny, jeśli szukasz wersji synchronizacji, jej nazwa to.readFileSync
.fs/promises
od Węzła 10. Uwaga: interfejs API jest eksperymentalny: nodejs.org/api/fs.html#fs_fs_promises_api.readFile
jest asynchroniczny , ale nieasync
. Oznacza to, że funkcja nie jest zdefiniowanaasync
słowem kluczowym, ani nie zwraca obietnicy, więc nie możesz tego zrobićawait fs.readFile('whatever.json');
using node-fs-extra (async oczekuje)
źródło
Korzystanie z pakietu fs-extra jest dość proste:
Synchronizacja:
Asynchronizacja:
źródło
źródło
https://nodejs.org/dist/latest-v6.x/docs/api/fs.html#fs_fs_readfile_file_options_callback
https://nodejs.org/dist/latest-v6.x/docs/api/fs.html#fs_fs_readfilesync_file_options
Całe użycie Node.js można znaleźć w dokumentacji systemu plików!
mam nadzieję, że ta pomoc dla ciebie!
źródło
Tak wiele odpowiedzi i nikt nigdy nie przeprowadził testu porównawczego synchronizacji z asynchronizacją z wymaganiem. Opisałem różnicę w przypadkach korzystania z czytania json w pamięci poprzez wymagać, readFileSync i readfile tutaj .
źródło
Jeśli szukasz kompletnego rozwiązania do
Async
ładowania pliku JSONRelative Path
z obsługą błędówStruktura katalogów:
źródło