Contexte
Je fais une expérimentation avec Node.js et je voudrais lire un objet JSON, soit à partir d'un fichier texte ou d'un fichier .js (ce qui est mieux ??) en mémoire afin que je puisse accéder rapidement à cet objet à partir du code. Je me rends compte qu'il y a des choses comme Mongo, Alfred, etc., mais ce n'est pas ce dont j'ai besoin en ce moment.
Question
Comment lire un objet JSON dans un fichier texte ou js et dans la mémoire du serveur à l'aide de JavaScript / Node?
javascript
json
node.js
Matt Cashatt
la source
la source
Réponses:
Sync:
Async:
la source
let imported = require("file.json")
. (2) JSON.parse doit être asynchrone, car j'ai utilisé ce code pour charger un fichier JSON de 70 Mo en mémoire en tant qu'objet. Cela prend des millisecondes de cette façon, mais si j'utiliserequire()
, il s'étouffe .require
, cette réponse n'est plus applicable si vous souhaitez simplement charger un fichier json. Il suffit d'utiliserlet data = require('./yourjsonfile.json')
et de partir (avec la note que si les performances de require ont un impact sur votre code, vous avez des problèmes bien au-delà de "vouloir charger un fichier .json")La façon la plus simple que j'ai trouvée de le faire est d'utiliser simplement
require
et le chemin d'accès à votre fichier JSON.Par exemple, supposons que vous ayez le fichier JSON suivant.
test.json
Vous pouvez ensuite facilement le charger dans votre application node.js en utilisant
require
la source
require
nœud fonctionne de manière synchrone. Plongez au plus profond icitest.json
pourrait être différent de son exemple. J'utilisenode 5.0
require
ce qu'il exécuterait ce code? Si c'est le cas, vous devez vraiment contrôler la provenance de vos fichiers json ou un attaquant pourrait exécuter du code malveillant sur votre machine.Asynchrone est là pour une raison! Jette la pierre à @mihai
Sinon, voici le code qu'il a utilisé avec la version asynchrone:
la source
Au moins dans Node v8.9.1, vous pouvez simplement faire
var json_data = require('/path/to/local/file.json');
et accéder à tous les éléments de l'objet JSON.
la source
file.json
nouvelle exigence (sans redémarrer le programme), les données proviendront du premier chargement. Je n'ai pas de source pour soutenir cela, mais je l'ai eu dans l'application que je construisDans Node 8, vous pouvez utiliser le intégré
util.promisify()
pour lire de manière asynchrone un fichier comme celui-cila source
.readFile
est déjà asynchrone, si vous recherchez la version de synchronisation, son nom est.readFileSync
.fs/promises
partir du nœud 10. Remarque: l'API est expérimentale: nodejs.org/api/fs.html#fs_fs_promises_api.readFile
est asynchrone , mais pasasync
. Cela signifie que la fonction n'est pas définie avec unasync
mot-clé, ni ne renvoie une promesse, donc vous ne pouvez pas le faireawait fs.readFile('whatever.json');
en utilisant node-fs-extra (async wait)
la source
L'utilisation du package fs-extra est assez simple:
Sync:
Async:
la source
la source
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
Vous pouvez trouver toutes les utilisations de Node.js dans la documentation du système de fichiers!
j'espère que cette aide pour vous!
la source
Autant de réponses, et personne n'a jamais fait de référence pour comparer sync vs async vs require. J'ai décrit la différence dans les cas d'utilisation de la lecture de json en mémoire via require, readFileSync et readFile ici .
la source
Si vous cherchez une solution complète pour
Async
charger un fichier JSONRelative Path
avec la gestion des erreursStructure du répertoire:
la source