2011-02-03 24 views
12
में JSON का उपयोग करने की आवश्यकता क्यों

मैं सिर्फ पिछले हफ्ते jQuery करना शुरू कर दिया है, और अब तक मैं पहले से ही कुछ बुनियादी प्रणालियों ajax के साथ, बुनियादी jQuery CRUD और सरल चैट प्रणाली की तरह के अन्य काम पर संदर्भ के बिना बनाया मैं परीक्षण करने का फैसला के लिए खुद पर मैं jQuery में अकेले सिस्टम कैसे कर सकता हूं (जेएसओएन और एक्सएमएल के बिना)।php और AJAX

लेकिन जब मैं दूसरे काम पर देखने का फैसला किया (प्राप्त/अच्छी प्रथाओं और कोड वहाँ जानने के लिए उम्मीद कर रहा) बहुत कम या लगभग हर कार्यक्रम है कि ajax के साथ संबंधित इसमें कुछ JSON है। तो मैंने JSON specially this one का अध्ययन और पढ़ने का फैसला किया, लेकिन मुझे लगता है क्योंकि यह मेरा पहला समय है, मुझे अपने दिमाग में डूबने में समस्या आ रही है। हाँ मुझे पता है कि यह पदानुक्रमित डेटा का वर्णन करने का एक हल्का तरीका है ", मुझे यह भी पता है कि JSON को जेएस में एक शाब्दिक सरणी और ऑब्जेक्ट को मिश्रित करने और जेएस में इसे कैसे डिस्प्ले करना है।

लेकिन मेरा सवाल यह है कि इसका क्या अंतर है और इसका उपयोग करने से लाभ क्या है? जब भी मैं JSON के बिना AJAX और डेटाबेस का उपयोग कर सर्वर पर डेटा प्राप्त और संग्रहीत कर सकता हूं। जिस तरह से मैंने एक्सएमएल पर ध्यान केंद्रित नहीं किया है, क्योंकि मेरे शोध के आधार पर AJAX में JSON का उपयोग करना बेहतर है।

क्या आप मुझे कुछ वास्तविक साथ

एस 1 निपटने परिदृश्य दे सकते हैं। ajax php mysql (क्या नुकसान के साथ इस?)

और

s2। AJAX php mysql json (यह किस फायदे के साथ है?)

मेरा मतलब है, मेरा ध्यान डेटा भेजने और प्राप्त करना है, और मैं इसे पहले ही एस 1 के साथ कर सकता हूं।

क्षमा करें अगर आपको मेरा प्रश्न बेवकूफ लगता है। तिया। :)

उत्तर

23

JSON का उपयोग क्यों करें? जवाब पोर्टेबिलिटी और संरचना है।

JSON पोर्टेबल है क्योंकि पार्सर्स और लेखक कई भाषाओं के लिए उपलब्ध हैं। इसका अर्थ यह है कि JSON जो PHP स्क्रिप्ट उत्पन्न करता है उसे जावास्क्रिप्ट स्क्रिप्ट द्वारा बहुत आसानी से समझा जा सकता है। यह सरणी और वस्तुओं जैसे जटिल संरचनाओं को प्रसारित करने का सबसे अच्छा तरीका है, और यह अभी भी कई भाषाओं के साथ संगत है।

JSON संरचना प्रदान करता है क्योंकि आपके द्वारा प्रेषित डेटा में लगातार स्वरूपण हो सकता है। यह अल्प-पाठ (यानी unformatted) डेटा, जैसे अल्पविराम से अलग या सीमित डेटा को प्रेषित करने की बजाय है।

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

एक साइड नोट के रूप में, जेएसओएन एक्सएमएल से वास्तव में बेहतर है। यह अंतरिक्ष के मुकाबले ज्यादा कुशल है। अंतरिक्ष लेने के लिए कोई टैग नाम नहीं हैं। संरचना वर्बोज टैग के बजाय, नेस्टेड ब्रेसिज़ के माध्यम से बनाई गई है।

संसाधन

यहाँ मतभेद और पेशेवरों पर एक दिलचस्प लेख है/XML और JSON की विपक्ष: http://www.json.org/xml.html

उदाहरण

आपके अनुरोध पर, यहाँ एन्कोडिंग का एक उदाहरण है PHP के साथ JSON। यह docs से फट जाता है:

$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); 

echo json_encode($arr); 

आउटपुट:

{"a":1,"b":2,"c":3,"d":4,"e":5} 

कुछ इस तरह करने के लिए इसके विपरीत यह, JSON के बिना:

a,1 
b,2 
c,3 
d,4 
e,5 

कि पार्स करने के लिए आप चाहते हैं प्रत्येक पंक्ति के माध्यम से पुनरावृत्त करने के लिए, मानों को स्वयं विभाजित करें, और फिर सरणी बनाएं। यह है कि मुश्किल नहीं है, लेकिन कल्पना करें कि आप एक नेस्टेड वस्तु है:

$arr = array ('a'=> array(1,2,3),'b'=> array('a' => 1, 'b' => 2),'c'=>3,'d'=> array(1,2,3,4,5) ,'e'=>5); // etc. 
JSON के साथ

, यह इसके एन्कोड करने के लिए अलग नहीं है। बस json_encode का उपयोग करें। लेकिन, इसे मैन्युअल रूप से एन्कोड करना, और फिर इसे मैन्युअल रूप से डीकोड करना काफी अधिक काम करेगा। प्रोग्रामिंग भाषा किसी भी प्रकार का में

+0

मैंने ब्राउज़रों के बारे में सुना है [JSON MIME प्रकार] (http://stackoverflow.com/questions/477816) के लिए अनुकूलित टेक्स्ट-प्राप्त करने और पार्सिंग। या, शायद यह है कि एक्सएमएल के साथ अधिक ओवरहेड है। – zanlok

+1

दिलचस्प, लेकिन किस तरह से अनुकूलित? –

+0

ओह, मैंने सोचा था कि आप एक विशिष्ट अनुकूलित JSON MIME प्रकार का जिक्र कर रहे थे। कोई बात नहीं। लेकिन हाँ, एक्सएमएल के रास्ते अधिक ओवरहेड है। –

5

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

JSON केवल एक स्ट्रिंग का उपयोग करके सरणी और अन्य प्रकारों को व्यक्त करने का एक शानदार तरीका है। इस तरह आप अलग-अलग वातावरण के बीच मनमाने ढंग से डेटा को आगे और आगे पारित कर सकते हैं और शुद्ध पाठ तक ही सीमित नहीं हैं। एक्सएमएल एक ही तरह की समस्या हल करता है, लेकिन अक्सर सरल AJAX अनुरोधों के लिए ओवरकिल होता है।

+0

लेकिन कोई भी आसानी से 'डीकोडएक्सएमएल (एनकोडएक्सएमएल (सरणी)) का उपयोग कर सकता है - विधि नाम बनाए गए हैं, लेकिन यह भी लागू होता है। परिवहन के उपयोग के रूप में केवल "आवश्यकता" यह है कि दोनों पक्ष एक परिभाषित मामले में डेटा को संसाधित कर सकते हैं। आंतरिक रूप से मैं एक "जेक्सओएन" प्रारूप का उपयोग करता हूं जो जेएसओएन एक्सएमएल में मैप किया गया है (कुछ पुस्तकालय एक्सएमएल के साथ सौदा करते हैं लेकिन जेएसओएन नहीं: - /) मुझे गलत मत समझो, ज्यादातर मामलों के लिए मैं प्रतिक्रिया में जेएसओएन को देखता हूं। मैं ^^ –

+0

@pst निश्चित रूप से डीबग करने की कोशिश कर रहा हूं। लेकिन एक्सएमएल प्रारूप बहुत अधिक वर्बोज़ है और इसलिए बहुत अधिक ओवरहेड है। इसका एकमात्र लाभ एक जटिल प्रारूप है, उदा। मूल्यों पर गुणों की इजाजत देता है, लेकिन यह अक्सर AJAX अनुरोधों के लिए अनावश्यक है। क्या आपके पास "जैक्सन" का ठोस उदाहरण है? – deceze

+0

टर्सनेस एक मानव-आराम है (मुझे यह पसंद है)। इसके अलावा एक्सएमएल काफी संकुचित है और बैंडविड्थ कम नहीं हो रहा है ... और, '{' 1 '=> [' ए ', 2, 3],' 2 '=> "स्ट्रिंग"} '' होगा a23 स्ट्रिंग '। असल में तत्व प्रकार है और यदि यह किसी ऑब्जेक्ट के प्रोप वैल्यू का प्रतिनिधित्व करता है तो इसमें "कुंजी" विशेषता होती है (शून्य और अपरिभाषित अद्वितीय तत्वों के रूप में भी प्रदर्शित होते हैं)। यहां पहली पसंद जेएसओएन का उपयोग करना होगा - मैं ज्यादातर शैतान वकील खेल रहा हूं - लेकिन यह विकल्प नहीं था क्योंकि एक्सएमएल को स्टैक के माध्यम से आवश्यक था: -/ –