जैसा कि ज्ञात है, JSON XML की तुलना में हल्का डेटा प्रारूप है और इसका उपयोग करना अधिक बेहतर है। लेकिन जब आप एक ही संरचना के साथ वस्तुओं के बड़े सरणियों को स्थानांतरित करते हैं, तो JSON डेटा के साथ भी अधिभारित होता है। उदाहरण के लिए:

[
    {
        name: 'John',
        surname: 'Smith',
        info: { age: 25, comments: '' }
    },
    {
        name: 'Sam',
        surname: 'Black',
        info: { age: 27, comments: '' }
    },
    {
        name: 'Tom',
        surname: 'Lewis',
        info: { age: 21, comments: '' }
    }
]

name, surname, age और comments ट्रिपल डिक्लेरेशन बेकार है, अगर मैं वास्तव में जानता हूं, कि हर ऐरे ऑब्जेक्ट की संरचना समान होती है।
क्या कोई डेटा प्रारूप है, जो ऐसे सरणी डेटा को छोटा कर सकता है और पर्याप्त लचीला हो सकता है?

0
Sergey Metlov 3 अगस्त 2011, 10:35
आपने इस बारे में कोई स्पष्टीकरण नहीं दिया कि यह आपके उपयोग के मामले में "अतिभारित" या अनुपयुक्त क्यों है। यदि आप डेटा आकार के बारे में चिंतित हैं, तो संपीड़न पर विचार करें - साथ ही, HTTP के तहत, आपको आमतौर पर मुफ्त में संपीड़न मिलता है। JSON सिंटैक्स आमतौर पर अप्रासंगिक होने के लिए संकुचित हो जाता है।
 – 
pawstrong
5 सितंबर 2011, 22:49

2 जवाब

सबसे बढ़िया उत्तर

बेशक, यह एक हैकिश समाधान है, लेकिन हमने इसका इस्तेमाल किया है और यह काम करता है। आप सब कुछ सरणियों में समतल कर सकते हैं। उदाहरण के लिए, उपरोक्त के रूप में दर्शाया जाएगा:

[
    ['John','Smith',[24,'']],
    ['Sam','Black',[27,'']],
    ['Tom','Lewis',[21,'']]
]

नकारात्मकता यह है कि क्रमबद्ध/deserializing पर, आपको कुछ कस्टम तर्क करना होगा। हालांकि, इसका परिणाम टेक्स्ट-आधारित समाधान के लिए अतिरिक्त बचत में होता है, और रे सही है - यदि आप वास्तव में अधिकतम बचत चाहते हैं, तो बाइनरी जाने का रास्ता है।

2
incaren 3 अगस्त 2011, 10:44
1
यदि प्रत्येक आइटम का प्रारूप बिल्कुल समान है, तो स्कीमा को संग्रहीत करने वाली पहली पंक्ति के साथ हमेशा CSV होता है!
 – 
Ray Toal
3 अगस्त 2011, 11:34

ठीक है अगर आपके पास टेक्स्ट प्रारूप हैं, तो वाईएएमएल न्यूनतम मार्कअप रखने का प्रयास करता है। यह अर्धविराम और ब्रेसिज़ से काफी हद तक छुटकारा पाता है। लेकिन टेक्स्ट बहुत अच्छी तरह से कंप्रेस करता है।

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

देर से जोड़:

ओह माय, पिछले एक साल में दर्जनों गीगाबाइट को एक शॉट में संसाधित करने के लिए Hadoop का उपयोग करने के बाद, मैं CSV को कैसे भूल सकता था? गीज़। पहली पंक्ति स्कीमा हो सकती है, और आपको वास्तव में उद्धरणों की आवश्यकता नहीं है। और विभाजक आप पर निर्भर हो सकता है। कुछ इस तरह:

name|surname|infoage|infocomments
John|Smith|24|
Sam|Black|27|Hi this is a comment
Tom|Lewis|21|This comment has an \| escaped pipe

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

साथ ही सीएसवी वास्तव में केवल तभी अच्छा होता है जब आपके पास समान वस्तुओं का संग्रह होता है। जटिल वस्तु पदानुक्रम के लिए बाइनरी, YAML, या @ incaren के सरणी-आधारित समाधान के साथ जाते हैं।

1
Ray Toal 3 अगस्त 2011, 11:39