2013-08-15 9 views
6

tl; dr जेसन फ़ाइलों में कॉन्फ़िगरेशन डेटा संग्रहीत क्यों एक वास्तविक तथ्य माना जाता है?कॉन्फ़िगरेशन डेटा संग्रहीत करना (जेसन)

मैंने हाल ही में Maintainable Javascript पुस्तक के कुछ हिस्सों को पढ़ा है, विशेष रूप से कॉन्फ़िगरेशन डेटा अध्याय संग्रहित करना।

यह अध्याय से एक उद्धरण है:

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

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

वह मूल रूप से कहता है कि .json फ़ाइलों या .js फ़ाइलों में कॉन्फ़िगरेशन डेटा संग्रहीत करना एक बुरा अभ्यास है और इसे टालना चाहिए।

json.org से:

JSON (जावास्क्रिप्ट ऑब्जेक्ट नोटेशन) एक हल्के डेटा विनिमय प्रारूप है।

इंटरचेंज का मतलब है कि मुझे दो प्रक्रियाओं को एक अच्छी तरह से स्वरूपित तरीके से संवाद करने के लिए डेटा भेजने और प्राप्त करने का अर्थ है।

लोगों का एक बहुत json फ़ाइलों में डेटा है, जो शोर का एक बहुत कुछ कहते हैं भंडारण कर रहे हैं: घुंघराले ब्रेसिज़, खरोज, डबल कोट, कॉमा, नहीं टिप्पणी, आदि लिख सकते हैं

जावा कुंजी-मान लाइनों का उपयोग करता है, क्या इस डेटा को स्टोर करने का एक आसान तरीका है?

a 1 

और json प्रारूप के साथ (1):

{ 
    "a": 1 
} 

और जे एस प्रारूप (2) के साथ:

module.exports = { 
    a: 1 
} 

माइक्रोसॉफ्ट जो इन महत्वपूर्ण करने के लिए वर्गों को जोड़ने फ़ाइलें .ini उपयोग करने के लिए पसंद करती है -वृत्त लाइनें

यूनिक्स कॉन्फ़िगरेशन फ़ाइलें भी कुंजी-मान लाइनों का उपयोग करती हैं।

फिर, अगर पूरी दुनिया कुंजी-मूल्य रेखाओं का उपयोग करती है क्योंकि उन्हें मनुष्यों द्वारा पढ़ने/लिखना आसान होता है, तो जेसन दुनिया node.js दुनिया में एक वास्तविक तथ्य क्यों है? कृपया मुझे यह न बताएं क्योंकि ऐसा इसलिए है क्योंकि जेसन और जावास्क्रिप्ट व्यावहारिक रूप से समानार्थी हैं और क्योंकि डेवलपर्स बहुत आलसी हैं और require("./config.json") पर कॉल करना पसंद करते हैं।

उपरोक्त उदाहरणों में, पहला विकल्प (1) डेटा इंटरचेंजबिलिटी को कम करने के लिए पैदा हुआ था।और दूसरा, आईएमओ, यह सिर्फ खराब है। यह जावा क्लास में कॉन्फ़िगरेशन डेटा संग्रहीत करने जैसा ही है। अगर मैं इस फ़ाइल को php से पढ़ना चाहता हूं क्योंकि मेरे पास रीयल-टाइम चीजों के लिए अपाचे सर्वर और नोडजेज़ हैं, तो मुझे उस फ़ाइल को कैसे पार्स करना है? मुझे एक जावास्क्रिप्ट पार्सर चाहिए।

दोनों विकल्पों में वाक्यविन्यास त्रुटियां नहीं होनी चाहिए या प्रोग्राम क्रैश हो सकता है।

+1

मैं उद्धरण से एक अलग व्याख्या लेता हूं: यह कह रहा है कि * जावास्क्रिप्ट * (यानी, .js फ़ाइलों) में कॉन्फ़िगरेशन संग्रहीत करना बुरा है। यह ** ** नहीं कह रहा है कि JSON में कॉन्फ़िगरेशन कॉन्फ़िगर करना खराब है (यह नहीं है)। ** JSON! = जावास्क्रिप्ट। ** – josh3736

+1

यह मुझे परेशान करता है कि एक्सएमएल को पिंजरे मैच एर में आमंत्रित नहीं किया गया था .. चर्चा ... – dc5

उत्तर

3

पुनश्च - IMHO आप टिप्पणी के बारे में सही कर रहे हैं, कि टिप्पणियों

पी पी एस के बिना प्रारूप के साथ काम करने के लिए भयानक है - मैं जावास्क्रिप्ट डेवलपर हूं पोस्ट पर JavaScript टैग है - तो इस ओर से subjectivelly का जवाब

JSON में कॉन्फ़िगरेशन डेटा संग्रहीत क्यों करें?

यह बहुत आसान है। जावास्क्रिप्ट में क्योंकि JSON को JS में Object के रूप में स्वरूपित किया गया है, इसलिए आपके पास सर्वर-साइड ऑब्जेक्ट्स, क्लाइंट-साइड ऑब्जेक्ट्स और डेटा स्टोर्स के लिए समान वाक्यविन्यास हो सकता है। जब आप कुछ डीबग करना चाहते हैं, तो आप बस पूरे JSON को पकड़ सकते हैं और var obj = JSON जैसे कोड में डाल सकते हैं और यह काम करता है। आप http://www.json.org/ क्रॉकफोर्ड की वेबसाइट पर और अधिक पा सकते हैं।

क्यों महत्वपूर्ण है "घुंघराले ब्रेसिज़, पहचान, डबल कोट्स के रूप में बहुत शोर .."?

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

दूसरा कारण सरणी, वस्तुओं, तारों और बूलियन के लिए अलग वाक्यविन्यास है। आप "सत्य" स्ट्रिंग का विकल्प चाहते हैं, बुलियन सत्य और संख्या सत्य - 1, क्योंकि आप कई डेटाबेस, स्टोरेज, एपीआई, प्रोग्रामिंग भाषाओं के साथ काम करना चाहते हैं - आपको पूरे पैमाने का समर्थन करना होगा।

पहचान और जेएसओएन संबंध कोई समस्या नहीं है। JSON एक पंक्तिबद्ध हो सकता है। कॉन्फ़िगरेशन फ़ाइलों में यह काफी अप्रत्याशित है (स्टैक ओवरफ्लो के उपयोगकर्ता इसे पार्स कर सकते हैं; डीडीडी लेकिन "सामान्य इंसान" नहीं)।

तीसरा कारण माता-पिता के संबंध हैं। आइए नमूना लें:

[ 
    { 
     "email": "[email protected]", 
     "isAdmin" : true, 
     "password": "KMLA#SLDOPW#", 
     "modules" : [ "html", "js", "css" ], 
     "creditcard" : { 
      "number" : 3288942398329832, 
      "expiration" : "2011-07-14T19:43:37+0100" 
     } 
    }, 
    { 
     "email": "[email protected]", 
     "isAdmin" : true, 
     "password": "KMLA#SLDOPW#", 
     "modules" : [ "js", "nodejs" ], 
     "creditcard" : { 
      "number" : 20432943092423, 
      "expiration" : "2011-07-14T19:43:37+0100" 
     } 
    }, 
    { 
     "email": "[email protected]", 
     "isAdmin" : false, 
     "password": "KMLA#SLDOPW#", 
     "modules" : [ "ruby", "python", "css" ], 
     "creditcard" : { 
      "number" : 4239093223423, 
      "expiration" : "2011-07-14T19:43:37+0100" 
     } 
    } 
] 

.. क्या आप सभी ईमेल कंसोल में लॉग करना चाहते हैं?
jsonobj.forEach(function(ele){ console.log(ele.email); });

.. क्या आप पहले उपयोगकर्ता के क्रेडिट कार्ड नंबर तक पहुंच चाहते हैं?
jsonobj[0].creditcard.number

.. क्या आप अगले उपयोगकर्ता को जोड़ना चाहते हैं? jsonobj.push({ email: "[email protected]:, isAdmin: false })

.. क्या आप बाहरी पुस्तकालय के बिना फ़ाइल को पार्स करना चाहते हैं? JSON.parse(jsonrawfile);

JSON बनाम।एक्सएमएल

एक्सएमएल होना बहुत ही सरल तरीका है। लेकिन इसके बारे में कुछ मतभेदों को गूगल करने का प्रयास करें। मुझे लगता है कि फ्रंट एंड डेवलपर्स प्रशंसकों आईएम 6 के रूप में प्रशंसकों के रूप में हैं। इसके और कारण हैं कि ऐसा क्यों है। इसके लिए Google आज़माएं।

आशा है कि इससे काफी मदद मिलेगी।

संबंधित मुद्दे