apakah ada persyaratan untuk json di node.js

247

Saya ingin memasukkan beberapa file JSON dalam kode JavaScript saya yang ada di direktori yang sama dengan file sumber JavaScript saya.

Jika saya ingin memasukkan file JavaScript lain, saya cukup menggunakan require. Sekarang saya menggunakan readFileSyncdan __dirnameuntuk mendapatkan JSON, yang menurut saya merupakan cara jelek untuk melakukannya.

Apakah ada persyaratan serupa yang memungkinkan saya untuk memuat file JSON?

Coen
sumber
Lihat pertanyaan serupa ini: stackoverflow.com/questions/4662851/…
holygeek
@ coen Apa yang Anda maksud dengan "termasuk file JSON"? Baca dan uraikan? Jika ya, kemungkinan duplikat: stackoverflow.com/questions/5726729/…
Ciro Santilli 郝海东 冠状 病 六四 事件 事件
2
Iya; baca dan parsing. Tapi ini khusus membaca file , mirip dengan membaca file js, jadi ini bukan duplikat dan jawaban goatslacker masih valid.
Coen

Jawaban:

454

Pada node v0.5.x ya Anda dapat meminta JSON seperti halnya Anda membutuhkan file js.

var someObject = require('./somefile.json')

Dalam ES6:

import someObject from ('./somefile.json')

goatslacker
sumber
1
Apakah ini benar? Ini tidak berfungsi untuk saya, dan github.com/joyent/node/issues/1357 dan github.com/joyent/node/pull/584 menyarankan itu tidak boleh.
user161642
12
Anda perlu menggunakan require ('./ somefile.json') dengan asumsi file berada di direktori yang sama (perhatikan titik dan garis miring).
Steve Willcock
66
Ada satu gotcha dengan ini. Hasilnya akan di-cache! Jadi jika Anda karena suatu alasan perlu memuat data lagi (katakanlah di cronjob), Anda akan mendapatkan hasil lama yang sama.
Juho Vepsäläinen
41
Catatan: ekstensi .jsontampaknya penting
nha
9
json yang dibentuk dengan baik juga membantu
sdeburca
40

File JSON tidak memerlukan pernyataan ekspor eksplisit. Anda tidak perlu mengekspor untuk menggunakannya sebagai file Javascript.

Jadi, Anda dapat menggunakan hanya requireuntuk dokumen JSON yang valid.

data.json

{
  "name": "Freddie Mercury"
}

main.js

var obj = require('data.json');

console.log(obj.name); 
//Freddie Mercury
serkan
sumber
20

Tidak. Baik menggunakan readFileatau readFileSync(Yang terakhir hanya pada saat startup).

Atau gunakan perpustakaan yang ada suka

Atau tulis konfigurasi Anda dalam file js daripada file json suka

module.exports = {
  // json
}
Raynos
sumber
1
@ coen ya, kami selalu gunakan __dirnameuntuk membuat jalur relatif.
Raynos
Berlari ke tempat ini di mana ia akan mengimpor JSON secara lokal tetapi tidak dalam wadah buruh pelabuhan pada contoh EC2 saya di AWS ... Alih-alih mencoba mengkonfigurasi tipe mime dan apa yang tidak, saya hanya beralih ke JS bukan JSON. Semoga ini bisa membantu seseorang.
Erik Grosskurth
17

Dua yang paling umum

Cara pertama:

let jsonData = require('./JsonFile.json')

let jsonData = require('./JsonFile') // jika kita menghilangkan .json juga berfungsi

ATAU

import jsonData from ('./JsonFile.json')

Cara kedua:

1) secara serempak

const fs = require('fs')
let jsonData = JSON.parse(fs.readFileSync('JsonFile.json', 'utf-8'))

2) tidak sinkron

const fs = require('fs')
let jsonData = {}
fs.readFile('JsonFile.json', 'utf-8', (err, data) => {
  if (err) throw err

  jsonData = JSON.parse(data)
})

Catatan: 1) jika kita JsonFile.json diubah, kita tidak mendapatkan data baru, bahkan jika kita menjalankan membutuhkan ('./ JsonFile.json')

2) fs.readFile atau fs.readFileSync akan selalu membaca ulang file, dan mendapatkan perubahan

rajmobiapp
sumber
Perhatikan bahwa metode fs menggunakan direktori tempat node diluncurkan dari sebagai titik awal, bukan direktori tempat kode sumber melakukan pembacaan berada, sedangkan metode "wajib" menggunakan jalur relatif terhadap lokasi kode sumber yang mengimpor. Jadi, Anda akan memiliki perbedaan jalur antara dua metode segera setelah Anda menyimpan sesuatu di folder yang berbeda.
Will59
3

Anda bahkan dapat menggunakan membutuhkan JSON Anda tanpa menentukan ekstensi .json . Ini akan memungkinkan Anda mengubah ekstensi file menjadi .js tanpa ada perubahan pada impor Anda.

dengan asumsi kita memiliki ./myJsonFile.json di direktori yang sama.

const data = require('./myJsonFile')

Jika di masa depan Anda akan mengubah ./myJsonFile.json menjadi ./myJsonFile.js tidak ada yang harus diubah dalam impor.

Igor Litvinovich
sumber