node.js'de json için bir gereksinim var mı


247

JavaScript kaynak dosyam ile aynı dizinde bulunan JavaScript koduma birkaç JSON dosyası eklemek istiyorum.

Başka bir JavaScript dosyası eklemek istersem sadece kullanabilirim require. Şimdi kullanıyorum readFileSyncve __dirnamebunu yapmak için çirkin bir yol olduğunu düşünüyorum JSON almak için.

JSON dosyasını yüklememi sağlayan gereksinim için benzer bir şey var mı?



@coen "JSON dosyası dahil et" ile ne demek istiyorsun? Oku ve ayrıştır? Evetse, olası kopyası: stackoverflow.com/questions/5726729/…
Ciro Santilli 法轮功 冠状 病 六四 事件 法轮功

2
Evet; okuyun ve ayrıştırın. Ama bu özellikle bir js dosyasını okumaya benzer bir dosyayı okuyor, bu yüzden bu yinelenmiyor ve goatslacker'ın yanıtı hala geçerli.
Coen

Yanıtlar:


455

V0.5.x düğümünden itibaren js dosyasına ihtiyacınız olduğu gibi JSON'unuzu isteyebilirsiniz.

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

ES6'da:

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


1
Bu doğru mu? Benim için çalışmıyor ve github.com/joyent/node/issues/1357 ve github.com/joyent/node/pull/584 olmamalı.
user161642

12
Dosyanın aynı dizinde olduğunu varsayarak requir ('./ somefile.json') kullanmanız gerekir (nokta ve eğik çizgiyi not edin).
Steve Willcock

66
Bununla ilgili bir tane var. Sonuç önbelleğe alınacak! Bu nedenle, herhangi bir nedenle verileri tekrar yüklemeniz gerekiyorsa (örneğin bir cronjob'da), aynı eski sonucu alırsınız.
Juho Vepsäläinen

41
Not: uzantı .jsonönemli gibi görünüyor
nha

9
iyi biçimli json çok yardımcı olur
sdeburca

40

JSON dosyaları açık bir dışa aktarma bildirimi gerektirmez. Javascript dosyaları olarak kullanmak için dışa aktarmanıza gerek yoktur.

Yani, sadece requiregeçerli JSON belgesi için kullanabilirsiniz .

Data.JSON

{
  "name": "Freddie Mercury"
}

main.js

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

console.log(obj.name); 
//Freddie Mercury

20

Hayır. Ya kullanın readFileveya readFileSync(İkincisi sadece başlangıç ​​zamanında).

Veya şu gibi mevcut bir kütüphaneyi kullanın:

Alternatif olarak, yapılandırmanızı json dosyası yerine js dosyasına yazın.

module.exports = {
  // json
}

1
@ coen evet, her zaman __dirnamegöreceli yollar yapmak için kullanırız .
Raynos

Yerel olarak JSON ithal edecek ancak AWS'deki EC2 örneğimdeki docker kapsayıcısında bu işe yaramayacaktı ... MIME tiplerini yapılandırmaya çalışmak yerine, sadece JSON yerine JS'ye geçtim. Umarım bu birine yardımcı olabilir.
Erik Grosskurth

17

En yaygın iki

İlk yol:

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

let jsonData = require('./JsonFile') // .json'u atlarsak da çalışır

VEYA

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

İkinci yol:

1) senkronize

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

2) eşzamansız olarak

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

  jsonData = JSON.parse(data)
})

Not: 1) eğer JsonFile.json değiştirilirse, tekrar talep etsek bile yeni verileri almayız ('./ JsonFile.json')

2) fs.readFile veya fs.readFileSync her zaman dosyayı yeniden okur ve değişiklikleri alır


Fs yönteminin, düğümün başlangıç ​​noktası olarak başlatıldığı dizini kullandığını, okumayı yapan kaynak kodun bulunduğu dizini kullandığını, "requir" yönteminin ise içe aktarılan kaynak kodu konumuna göre yolu kullandığını unutmayın. Böylece, farklı klasörlerdeki şeyleri sakladığınız anda iki yöntem arasındaki yollarda farklılıklar olacaktır.
Will59

3

.Json uzantısını belirtmeden JSON gereksiniminizi bile kullanabilirsiniz . İçe aktarma işleminizde herhangi bir değişiklik yapmadan dosya uzantısını .js olarak değiştirmenize izin verir .

aynı dizinde ./myJsonFile.json olduğunu varsayarsak .

const data = require('./myJsonFile')

Gelecekte değiştirmek edeceğiz Eğer ./myJsonFile.json için ./myJsonFile.js şey İthalatta değiştirilmelidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.