JSON

2010-01-21 9 views
6

में रूट नोड्स मुझे दो वेब ऐप्स के बीच संचार परिभाषित करने के साथ काम सौंपा गया है। मैंने इसके लिए JSON का उपयोग करने का निर्णय लिया है। JSON में रूट नोड कितना आम है?JSON

मान लें कि हमारे पास कार वस्तु है। यह "कार" रूट नोड होने के साथ JSON है:

{"Car": { 
    "Make":"Mustang", 
    "YearBuilt":"1999"}} 

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

{"Tire": {"Make": "Brirdgestone", "Size":"15"}} 

मूल कार ऑब्जेक्ट में टायर ऑब्जेक्ट JSON को एकीकृत करना यह दिखाता है कि यह कितना अनावश्यक हो सकता है।

{"Car": { "Make":"Mustang", 
"YearBuilt":"1999", 
"Tires": "[{"Tire": {"Make": "Brirdgestone", "Size":"15"}}, 
{"Tire": {"Make": "Brirdgestone", "Size":"15"}}, 
{"Tire": {"Make": "Bridgestone", "Size":"15"}}, 
{"Tire": {"Make": "Brirdgestone", "Size":"15"}} 
]}} 

तो PHP में धारावाहिक, पहले टायर के मेकअप $object->Car->Tires[0]->Tire->Make होगा। रूट नोड की वजह से वहां अतिरिक्त टायर स्तर है।

यदि टायर में रूट नोड नहीं था तो कोड बहुत पतला हो सकता है।

{"Car": { "Make":"Mustang", 
"YearBuilt":"1999", 
"Tires": "[{ {"Make": "Bridgestone", "Size":"15"}}, 
{"Make": "Brirdgestone", "Size":"15"}}, 
{"Make": "Brirdgestone", "Size":"15"}}, 
{"Make": "Brirdgestone", "Size":"15"}}]}} 

पीएचपी में, वहाँ कम भ्रम है कम अतिरेक है क्योंकि: पहले टायर के मेकअप से $object->Car->Tires[0]->Make

कहा जाता है कि वहाँ एक रूट नोड नहीं होने से कुछ भी बुरा है? मुझे रूट नोड होना पसंद है क्योंकि यह कक्षा के वर्ग को पसंद करता है, लेकिन अनावश्यक स्तर मुझे बहुत खराब करते हैं और अधिक जटिल बनाते हैं।

उत्तर

4

मैं रूट रूट्स, टायर और कार दोनों को छोड़ दूंगा।

ध्यान रखें कि JSON का प्राथमिक उपयोग किसी कॉम्पैक्ट प्रारूप में नेटवर्क पर ऑब्जेक्ट्स को स्थानांतरित कर रहा है। इसके बगल में कोई वास्तविक उपयोग नहीं है। आप जेएसओएन एन्कोड के डेटा के साथ काम करना चाहते हैं और रूट नोड्स जोड़कर, आप खाली कंटेनर ऑब्जेक्ट्स बना रहे हैं जिसमें वास्तविक पहचान और उद्देश्य नहीं है। जब जड़ नोड्स omiting, आप

$car->tires[0]->make 

हो और जे एस में आपको मिल चाहते हैं

car.tires[0].make 

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

यदि आप जेएसओएन में कक्षा का नाम रखना चाहते हैं, तो बस इसे एक संपत्ति बनाएं, उदा।

{ 'klass': 'Car', 'make': 'Mustang', 'year':1999 } 
+0

मैं सहमत हूं। रूट नोड्स उपभोग करने वाले ऐप कोड को अनावश्यक रूप से वर्बोज़ बना देगा। – Steve

+0

कूल, बहुत बहुत धन्यवाद। मैंने एक क्षेत्र के बारे में सोचा जहां यह महत्वपूर्ण होगा। यदि JSON दर्पण और XML दस्तावेज़, आपको कम से कम मुख्य ऑब्जेक्ट पर एक जोड़ना चाहिए क्योंकि XML में, आपको रूट तत्व की आवश्यकता है। एक सहयोगी ने यह भी बताया कि जेएसओएनपी कॉलबैक के लिए यह महत्वपूर्ण है और अगर मैं एपीआई बना रहा तो बेहतर संरचना होगी। उदाहरण के लिए, याहू और eBay एपीआई परिणाम परिणाम नोड के चारों ओर सब कुछ लपेटें। यह पार्सर्स को अनुमति देता है जो किसी ऑब्जेक्ट प्रकार पर ResultSet को बाध्य करने के लिए प्रकारों की देखभाल करते हैं। –

+0

खैर, मुझे यकीन है कि आप UseCases के बारे में सोच सकते हैं जहां यह आसान हो सकता है, लेकिन फिर, जब भी मैंने अपने ऐप्स में JSON का उपयोग किया, तो मुझे कॉलबैक था जो उन्हें पता था कि उन्हें प्राप्त डेटा को कैसे संभालना है, उदा। example.com/cars/find/id/123 कार डेटा वापस कर देगा और मेरा कॉलबैक उन्हें बनाएगा। – Gordon

0

@ गॉर्डन अच्छे अंक बनाता है। हालांकि, मैं सर्वर से और उससे संदेशों को अवरुद्ध करने के लिए AJAX संदेशों के साथ AOP का उपयोग करना चाहता हूं। ये इंटरसेप्टर प्रत्येक संदेश को एक टाइमस्टैम्प और सर्वर से भेजे गए संदेशों पर एक स्टेटस फ्लैग (असफल, अपवाद, सफलता, जो भी ...) जोड़ते हैं। जैसा कि आपने अनुमान लगाया है, मैंने पेलोड, स्थिति और टाइमस्टैम्प के लिए रूट जेएसओएन नोड का उपयोग किया है।

सर्वर से भेजे गए स्थिति ध्वज को सामने के अंत में एक समारोह (पहलू) और एक ही स्थान पर संभाले गए सभी अपवादों में जांच की जा सकती है। जब सर्वर अपवाद के अलावा किसी कारण के लिए विफल रहता है, तो पहलू/सलाह डेटा को AJAX प्रारंभकर्ता को पास करने की अनुमति देती है।