Hintergrund
Ich experimentiere mit Node.js und möchte ein JSON-Objekt entweder aus einer Textdatei oder einer .js-Datei (was ist besser?) In den Speicher lesen, damit ich schnell über Code auf dieses Objekt zugreifen kann. Mir ist klar, dass es da draußen Dinge wie Mongo, Alfred usw. gibt, aber das ist momentan nicht das, was ich brauche.
Frage
Wie lese ich ein JSON-Objekt mit JavaScript / Node aus einer Text- oder JS-Datei in den Serverspeicher?
javascript
json
node.js
Matt Cashatt
quelle
quelle
Antworten:
Synchronisieren:
Async:
quelle
let imported = require("file.json")
. (2) JSON.parse muss asynchron sein, da ich diesen Code verwendet habe, um eine 70-MB-JSON-Datei als Objekt in den Speicher zu laden. Auf diese Weise dauert es Millisekunden, aber wenn ich es benutzerequire()
, tuckert es .require
Diese Antwort ist nicht mehr anwendbar, wenn Sie nur eine JSON-Datei laden möchten. Verwendenlet data = require('./yourjsonfile.json')
Sie einfach und los geht's (mit der Buchnote, dass Sie Probleme haben, wenn sich die Leistung von require auf Ihren Code auswirkt, weit über das "Laden einer .json-Datei" hinaus)Der einfachste Weg, dies zu tun, besteht darin, nur
require
den Pfad zu Ihrer JSON-Datei zu verwenden.Angenommen, Sie haben die folgende JSON-Datei.
test.json
Sie können dies dann einfach mit in Ihre node.js-Anwendung laden
require
quelle
require
läuft der Knoten synchron. Tauchen Sie hiertest.json
anders als sein Beispiel. Ich benutzenode 5.0
require
dieser Code ausgeführt? Wenn ja, müssen Sie wirklich steuern, woher Ihre JSON-Dateien stammen, oder ein Angreifer könnte schädlichen Code auf Ihrem Computer ausführen.Asynchron gibt es nicht ohne Grund! Wirft Stein auf @mihai
Ansonsten ist hier der Code, den er mit der asynchronen Version verwendet hat:
quelle
Zumindest in Node v8.9.1 können Sie dies einfach tun
var json_data = require('/path/to/local/file.json');
und greifen Sie auf alle Elemente des JSON-Objekts zu.
quelle
file.json
nach Neuanforderung ändern (ohne das Programm neu zu starten), stammen die Daten vom ersten Laden. Ich habe keine Quelle, um dies zu unterstützen, aber ich hatte dies in der App, die ich baueIn Knoten 8 können Sie die integrierte
util.promisify()
Datei verwenden, um eine solche Datei asynchron zu lesenquelle
.readFile
ist bereits asynchron, wenn Sie nach der Synchronisierungsversion suchen, lautet der Name.readFileSync
.fs/promises
ab Knoten 10. Hinweis: Die API ist experimentell: nodejs.org/api/fs.html#fs_fs_promises_api.readFile
ist asynchron , aber nichtasync
. Das heißt, die Funktion ist weder mit einemasync
Schlüsselwort definiert , noch gibt sie ein Versprechen zurück, also können Sie es nicht tunawait fs.readFile('whatever.json');
mit node-fs-extra (asynchron warten)
quelle
Die Verwendung des fs-extra- Pakets ist ganz einfach:
Synchronisieren:
Async:
quelle
quelle
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
Sie finden alle Verwendungszwecke von Node.js in den Dateisystemdokumenten!
hoffe diese Hilfe für dich!
quelle
So viele Antworten, und niemand hat jemals einen Benchmark erstellt, um Synchronisierung mit Asynchronisierung und Anforderung zu vergleichen. Ich beschrieb den Unterschied in der Anwendungsfälle des Lesens json in Speicher über erfordern, readFileSync und readfile hier .
quelle
Wenn Sie nach einer Komplettlösung zum
Async
Laden einer JSON-DateiRelative Path
mit Fehlerbehandlung suchenVerzeichnisaufbau:
quelle