Latar Belakang
Saya melakukan beberapa eksperimen dengan Node.js dan ingin membaca objek JSON, baik dari file teks atau file .js (yang lebih baik ??) ke dalam memori sehingga saya dapat mengakses objek itu dengan cepat dari kode. Saya menyadari bahwa ada hal-hal seperti Mongo, Alfred, dll di luar sana, tetapi bukan itu yang saya butuhkan saat ini.
Pertanyaan
Bagaimana cara membaca objek JSON dari file teks atau js dan ke memori server menggunakan JavaScript / Node?
javascript
json
node.js
Matt Cashatt
sumber
sumber
Jawaban:
Sinkronkan:
Async:
sumber
let imported = require("file.json")
. (2) JSON.parse harus asinkron, karena saya menggunakan kode ini untuk memuat file JSON 70mb ke dalam memori sebagai objek. Dibutuhkan milidetik dengan cara ini, tetapi jika saya gunakanrequire()
, itu chugs .require
, dengan jawaban ini tidak lagi berlaku jika Anda hanya ingin memuat file json. Cukup gunakanlet data = require('./yourjsonfile.json')
dan pergilah (dengan catatan buku bahwa jika kinerja yang dibutuhkan memengaruhi kode Anda, Anda memiliki masalah jauh di luar "ingin memuat file .json")Cara termudah yang saya temukan untuk melakukan ini adalah dengan hanya menggunakan
require
dan path ke file JSON Anda.Misalnya, Anda memiliki file JSON berikut.
test.json
Anda kemudian dapat dengan mudah memuat ini dalam aplikasi node.js Anda menggunakan
require
sumber
require
dalam node berjalan secara sinkron. Menyelam jauh di sinitest.json
akan berbeda dari contohnya. Saya menggunakannode 5.0
require
itu akan menjalankan kode itu? Jika demikian maka Anda benar-benar perlu mengontrol dari mana file json Anda berasal atau penyerang dapat menjalankan kode berbahaya pada mesin Anda.Asynchronous ada karena suatu alasan! Melempar batu ke @mihai
Jika tidak, berikut adalah kode yang ia gunakan dengan versi asinkron:
sumber
Setidaknya di Node v8.9.1, Anda bisa melakukannya
var json_data = require('/path/to/local/file.json');
dan akses semua elemen objek JSON.
sumber
file.json
setelah baru membutuhkan (tanpa memulai kembali program) data akan dari memuat pertama. Saya tidak punya sumber untuk mendukung ini, tapi saya punya ini di aplikasi yang saya bangunDi Node 8 Anda dapat menggunakan built-in
util.promisify()
untuk secara asinkron membaca file seperti inisumber
.readFile
sudah async, jika Anda mencari versi sinkronisasi, namanya.readFileSync
.fs/promises
pada Node 10. Catatan: API adalah eksperimental: nodejs.org/api/fs.html#fs_fs_promises_api.readFile
tidak sinkron , tetapi tidakasync
. Artinya, fungsi ini tidak didefinisikan denganasync
kata kunci, juga tidak mengembalikan Janji, jadi Anda tidak dapat melakukannyaawait fs.readFile('whatever.json');
menggunakan node-fs-extra (async tunggu)
sumber
Menggunakan paket fs-extra cukup sederhana:
Sinkronkan:
Async:
sumber
sumber
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
Anda dapat menemukan semua penggunaan Node.js di dokumentasi Sistem File!
Semoga bantuan ini untuk Anda!
sumber
Begitu banyak jawaban, dan tidak ada yang pernah membuat tolok ukur untuk membandingkan sinkronisasi vs async vs butuhkan. Saya menggambarkan perbedaan dalam penggunaan kasus membaca json di memori melalui keharusan, readFileSync dan readFile di sini .
sumber
Jika Anda mencari solusi lengkap untuk
Async
memuat file JSON dariRelative Path
dengan Penanganan KesalahanStruktur Direktori:
sumber