वहाँ नोड के लिए json.js के लिए एक आवश्यकता है


247

मैं अपने जावास्क्रिप्ट कोड में JSON फ़ाइलों के एक जोड़े को शामिल करना चाहूंगा जो मेरी जावास्क्रिप्ट स्रोत फ़ाइल के समान निर्देशिका में हैं।

अगर मैं एक और जावास्क्रिप्ट फ़ाइल को शामिल करना चाहता था मैं बस इस्तेमाल कर सकते हैं require। अब मैं उपयोग कर रहा हूँ readFileSyncऔर __dirnameJSON, जो मुझे लगता है कि यह करने के लिए एक बदसूरत तरीका है पाने के लिए।

क्या आवश्यकता के लिए भी कुछ ऐसा ही है जो मुझे JSON फाइल लोड करने में सक्षम बनाता है?


इसी तरह का प्रश्न देखें: stackoverflow.com/questions/4662851/…
sacgeek

@coen "JSON फ़ाइल शामिल करें" से आपका क्या अभिप्राय है? इसे पढ़ें और पार्स करें? यदि हाँ, तो संभव डुप्लिकेट: stackoverflow.com/questions/5726729/…
Ciro Santilli 病 of of of

2
हाँ; पढ़ें और पार्स करें। लेकिन यह विशेष रूप से एक js फ़ाइल पढ़ने के समान एक फ़ाइल पढ़ रहा है, इसलिए यह कोई डुप्लिकेट नहीं है और बकरियों का उत्तर अभी भी मान्य है।
कॉइन

जवाबों:


455

नोड v0.5.x के रूप में हाँ आपको अपने JSON की आवश्यकता हो सकती है जैसे आपको एक js फ़ाइल की आवश्यकता होगी।

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

ES6 में:

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


1
क्या ये सच है? यह मेरे लिए काम नहीं कर रहा है, और github.com/joyent/node/issues/1357 और github.com/joyent/node/pull/584 सुझाव है कि इसे नहीं करना चाहिए।
user161642

12
आपको आवश्यकता है ('./ somefile.json') का उपयोग करने की आवश्यकता है मानकर फ़ाइल उसी निर्देशिका में है (डॉट और स्लैश पर ध्यान दें)।
स्टीव विलकॉक

66
इसके साथ एक गोचरा है। परिणाम होगा कैश! इसलिए यदि आपको किसी कारण से डेटा को फिर से लोड करने की आवश्यकता है (एक क्रोनजोब में कहें), तो आपको वही पुराना परिणाम मिलेगा।
जूहो वेपसलेनिन

41
नोट: विस्तार .jsonमामला लग रहा है
nha

9
अच्छी तरह से गठित
जसन

40

JSON फ़ाइलों को एक स्पष्ट निर्यात विवरण की आवश्यकता नहीं होती है। आपको इसे जावास्क्रिप्ट फ़ाइलों के रूप में उपयोग करने के लिए निर्यात करने की आवश्यकता नहीं है।

तो, आप केवल requireवैध JSON दस्तावेज़ के लिए उपयोग कर सकते हैं ।

data.json

{
  "name": "Freddie Mercury"
}

main.js

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

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

20

सं या तो उपयोग readFileया readFileSync(केवल स्टार्टअप समय बाद)।

या जैसे मौजूदा पुस्तकालय का उपयोग करें

वैकल्पिक रूप से js फ़ाइल में अपना कॉन्फिगर लिखें, बल्कि फिर json फाइल की तरह

module.exports = {
  // json
}

1
@ हाँ, हम हमेशा __dirnameरिश्तेदार पथ बनाने के लिए उपयोग करते हैं।
रेयानोस

इसमें भाग लिया जहां यह JSON को स्थानीय रूप से आयात करेगा, लेकिन AWS में मेरे EC2 उदाहरण पर docker कंटेनर में नहीं ... माइम प्रकारों को कॉन्फ़िगर करने की कोशिश करने के बजाय और क्या नहीं, मैंने JSON के बजाय JS को स्विच कर दिया। आशा है कि यह किसी की मदद कर सकता है।
एरिक ग्रॉसकथ

17

दो सबसे आम

पहला तरीका:

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

let jsonData = require('./JsonFile') // अगर हम omitting .json भी काम करता है

या

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

दूसरा तरीका:

1) तुल्यकालिक

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

2) एसिंक्रोनस रूप से

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

  jsonData = JSON.parse(data)
})

नोट: 1) अगर हम JsonFile.json को बदल दिया जाता है, तो हमें नया डेटा नहीं मिलता है, भले ही हमें आवश्यकता हो ('./ JsonFile.json')

2) fs.readFile या fs.readFileSync हमेशा फ़ाइल को पढ़ेगा, और परिवर्तन प्राप्त करेगा


ध्यान दें कि fs विधि उस निर्देशिका का उपयोग करती है जहां नोड को एक प्रारंभिक बिंदु के रूप में लॉन्च किया गया था, न कि उस निर्देशिका में जहां स्रोत कोड रीड कर रहा है, जबकि "आवश्यकता" विधि आयात स्रोत कोड स्थान के सापेक्ष पथ का उपयोग करती है। इसलिए जैसे ही आप विभिन्न फ़ोल्डरों में चीजों को स्टोर करते हैं, दोनों तरीकों के बीच पथ में अंतर होगा।
विल

3

आप एक्सटेंशन निर्दिष्ट किए बिना भी अपने JSON की आवश्यकता का उपयोग कर सकते हैं .json । यह आपको अपने आयात में कोई बदलाव किए बिना .js फ़ाइल एक्सटेंशन को बदलने देगा ।

यह मानते हुए कि हमारे पास एक ही निर्देशिका में/ myJsonFile.json है।

const data = require('./myJsonFile')

यदि भविष्य में आप बदलेंगे ।/myJsonFile.json to ./myJsonFile.js आयात में कुछ भी नहीं बदला जाना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.