क्या JSON कितना होल्ड कर सकता है, इसकी कोई सीमा है?


163

मैं एक टिप्पणी प्रणाली के लिए jquery, JSON और AJAX का उपयोग कर रहा हूं। मैं उत्सुक हूँ, क्या आप JSON के माध्यम से / स्टोर करके जो भेज सकते हैं, उस पर एक आकार की सीमा है? जैसे अगर कोई उपयोगकर्ता एक बड़ी राशि टाइप करता है और मैं इसे JSON के माध्यम से भेजता हूं तो क्या अधिकतम सीमा है?

इसके अलावा JSON के माध्यम से किसी भी प्रकार का पाठ भेजा जा सकता है। उदाहरण के लिए कुछ समय में मैं उपयोगकर्ताओं को html का उपयोग करने की अनुमति देता हूं, क्या यह ठीक होगा?


9
नीचे दिए गए लोगों के उत्तरों की व्याख्या कैसे करें, सावधान रहें! अधिकांश उत्तर कहते हैं कि स्वयं 'JSON' की कोई सीमा नहीं है। जबकि अधिकांश सर्वरों की विन्यास सीमा होगी। मैंने एक साधारण AJAX परीक्षण चलाया, जहां मैंने प्रत्येक भेजने पर और लगभग 8K बाइट्स पर एक बाइट बढ़ाया, यह कई PHP / अपाचे सर्वरों पर विफल रहा जो मैंने अब कोशिश की। त्रुटि थी: "414 (अनुरोध-यूआरआई बहुत बड़ा)"
पहुंचें

3
हम मज़बूती से iOS / iPhone पर 100kb पेलोड भेजते / प्राप्त करते हैं। कुछ सावधान रहना यह है कि कई प्रोटोकॉल चंक्स में डेटा प्राप्त करते हैं, और सभी डेटा प्राप्त होने की प्रतीक्षा करने के बजाय चंक को डिस्क्राइब करने का प्रयास करते हैं, जब तक कि आपके डेसराइलाइजर तर्क विशेष रूप से इसके लिए सेट नहीं हो जाते हैं।
हॉट लिक्स

1
@ जेक - 8K ब्लॉक में डेटा ट्रांसमिशन के टूटने के कारण विफलता लगभग निश्चित रूप से थी, फिर पार्स करने का प्रयास करने से पहले दूसरे छोर पर ठीक से आश्वस्त नहीं हुआ।
हॉट लिक्स

1
@ जच - यह एक सामान्य कोडिंग त्रुटि है। केवल अनुरोध के पहले प्रतिसाद संदेश के लिए प्रतीक्षा कर रहा है। अंतिम के लिए प्रतीक्षा कर रहा है और प्रतिक्रिया डेटा को एक साथ मिला रहा है। प्रत्येक प्रतिक्रिया में अधिकतम 8K होगा, इसलिए अधिक समय तक डेटा के लिए कई प्रतिक्रियाओं का उपयोग किया जाता है।
हॉट लीक्स

1
@Jeach - यदि आप iOS में ऐसा कर रहे हैं, तो एक मानक NSURLConnectionh के साथ, आपको connectionDidFinishLoadingवहां JSON अनुवाद को लागू करने और करने की आवश्यकता है (या उसके बाद कॉल किया जाता है), न कि didReceiveData(जहाँ आपको पहले प्राप्त तिथि के साथ प्राप्त डेटा को संक्षिप्त करना चाहिए) प्राप्त किया)। अन्य वातावरण समान हैं।
हॉट लक्स

जवाबों:


141

JSON XML जैसे अन्य डेटा प्रारूपों के समान है - यदि आपको अधिक डेटा प्रसारित करने की आवश्यकता है, तो आप बस अधिक डेटा भेजते हैं। JSON अनुरोध में कोई अंतर्निहित आकार सीमा नहीं है। अनुरोध को पार्स करके सर्वर द्वारा कोई सीमा निर्धारित की जाएगी। (उदाहरण के लिए, ASP.NET के पास धारावाहिक की "MaxJsonLength" संपत्ति है।)


1
इसलिए तकनीकी रूप से, यदि मैं इस पूरे पृष्ठ पर WHOLE सोर्सकोड लेना चाहता था, तो इसे एक json ऑब्जेक्ट के रूप में भेजा जा सकता है?
जेसनडेविस

इस पृष्ठ का कोड वास्तव में केवल 6.7kb (बाहरी संसाधनों की गिनती नहीं) है। यह आसानी से किसी भी प्रकार के HTTP अनुरोध के साथ किया जाएगा।
अंबर

15
यह ध्यान देने योग्य हो सकता है कि "डिफ़ॉल्ट 2097152 वर्ण है, जो JavaScriptSerializer.MaxJsonLengthएम्बर के उत्तर में वर्णित संपत्ति के लिए यूनिकोड स्ट्रिंग डेटा के 4 एमबी के बराबर है" । (NB मैं MSDN से उद्धृत किया गया है )
dumbledad

तो मैं 155kb JSON ऑब्जेक्ट को पार्स कैसे करूंगा?
रे

2
@AsadHasan एक सर्वर डेटा को किस दिशा में जा रहा है, इस आधार पर पार्स या क्रमबद्ध कर सकता है।
एम्बर

18

JSON डेटा ब्लॉक या फ़ील्ड में से कोई एक कितना बड़ा है, इसकी कोई निश्चित सीमा नहीं है।

कितने JSON जावास्क्रिप्ट के विभिन्न ब्राउज़रों के कार्यान्वयन को संभाल सकते हैं (जैसे मेरे अनुभव में लगभग 40 एमबी) की सीमाएं हैं। इस प्रश्न को उदाहरण के लिए देखें ।


4
8K JSON के लिए एक असाधारण छोटी सीमा है। मुझे संदेह है कि यह JSON के लिए एक सीमा नहीं है, बल्कि डेटा 8K ब्लॉक में प्रेषित किया जा रहा है, और डेटा प्राप्त करने वाले कोड को पूरे पेलोड के आने की प्रतीक्षा करने के बजाय एक व्यक्तिगत ब्लॉक को डिसेरिएलाइज़ करने का प्रयास किया जा रहा है।
हॉट लिक्स

मैं शर्त लगा सकता हूं कि आप सही हैं। मैंने अपना उत्तर अपडेट कर दिया।
cdiggins

9

यह आपके JSON लेखक / पार्सर के कार्यान्वयन पर निर्भर करता है। Microsoft का DataContractJsonSerializer लगता है कि 8kb (8192 मुझे लगता है) के आसपास एक कठिन सीमा है, और यह बड़े तारों के लिए त्रुटि करेगा।

संपादित करें: हम इस उत्तर में वर्णित वेब कॉन्फ़िगरेशन में MaxJsonLength संपत्ति सेट करके JSON स्ट्रिंग्स के लिए 8K सीमा को हल करने में सक्षम थे: https://stackoverflow.com/a/1151993/61569


5
एक 8K "सीमा" निश्चित रूप से एक डेटा ट्रांसमिशन ब्लॉक सीमा है, एक JSON दस्तावेज़ के लिए सीमा नहीं। मल्टी-ब्लॉक ट्रांसमिशन को सही तरीके से आश्वस्त करके बड़े तारों को संसाधित किया जा सकता है।
हॉट लिक्स

जब से हमने यह पता लगाया है कि DataContractJsonSerializer में 8K की सीमा को कैसे बदला जाए, तो कुछ समय हो गया है, लेकिन मुझे लगता है कि यह "MaxJsonLength" सेटिंग थी ( msdn.microsoft.com/en-us/lift/- )
एंथोनी एफ

5

भेजने या प्राप्त करने के लिए JSON डेटा के आकार पर वास्तव में कोई सीमा नहीं है। हम Json डेटा को फ़ाइल में भी भेज सकते हैं। आपके द्वारा काम कर रहे ब्राउज़र की क्षमताओं के अनुसार, Json डेटा को संभाला जा सकता है।


5

कार्यान्वयन JSON दस्तावेज़ों पर आकार सहित सीमाएँ सेट करने के लिए स्वतंत्र हैं, इसलिए अपने पार्सर को समझदारी से चुनें। देखें आरएफसी 7159 , धारा 9. Parsers:

"एक कार्यान्वयन ग्रंथों के आकार पर सीमाएं निर्धारित कर सकता है जिसे वह स्वीकार करता है। एक कार्यान्वयन घोंसले के शिकार की अधिकतम गहराई पर सीमाएं निर्धारित कर सकता है। एक कार्यान्वयन सीमा और संख्याओं की शुद्धता पर सीमाएं निर्धारित कर सकता है। एक कार्यान्वयन लंबाई और चरित्र पर सीमाएं निर्धारित कर सकता है। तार की सामग्री। "


3

यदि आप ASP.NET MVC के साथ काम कर रहे हैं, तो आप अपने परिणाम में MaxJsonLength जोड़कर समस्या का समाधान कर सकते हैं :

var jsonResult = Json(new
{
    draw = param.Draw,
    recordsTotal = count,
    recordsFiltered = count,
    data = result
}, JsonRequestBehavior.AllowGet);
jsonResult.MaxJsonLength = int.MaxValue;

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

@ कैसी - 4MB से परे आपके लिए क्या लक्षण है? हस्ताक्षरित 32-बिट पूर्णांक 2 बिलियन तक जाता है - आपके आकार को सीमित करने के लिए कहीं और कुछ होना चाहिए। डिफ़ॉल्ट MaxJsonLength का मूल्य 2 एम यूनिकोड वर्ण है, इसलिए 4MB। ऊपर दिया गया कोड MaxJsonLength को बहुत अधिक मूल्य तक बढ़ा रहा है । शायद "बहुत बड़ा" के रूप में खारिज कर दिया गया है - अन्य आकारों की कोशिश करें, और देखें कि आप कितना बड़ा प्राप्त कर सकते हैं। int.MaxValue
टूलमेकरसैट

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

यह मेरा मुद्दा है, Microsoft की प्रति वेब साइट पर इसे कैसे प्राप्त करें। "मूल रूप से," आंतरिक "JavaScriptSerializer वेब विधि से कॉल किए जाने पर maxJsonLength का सम्मान करता है। JavaScriptSerializer का प्रत्यक्ष उपयोग (या MVC एक्शन-मेथड / कंट्रोलर के माध्यम से उपयोग) अधिकतमJsonLength संपत्ति का सम्मान नहीं करता है, कम से कम systemWebExtensions से नहीं। .scripting.webServices.jsonSerialization अनुभाग जिसे आप web.config फ़ाइल में परिभाषित करते हैं। "
केसी

मुझे लगभग आश्चर्य है कि अगर मैं कह सकता था, तो सूची <प्रकार स्ट्रिंग> जैसे 50k से अधिक विखंडू में कुछ भी तोड़ दें, फिर उस नियंत्रक को भेजें, और एक स्ट्रिंग बल्ब करें, फिर SQL में आयात करें।
केसी

2

निश्चित रूप से हर किसी को यहाँ एक चाल याद है। एक json फ़ाइल की वर्तमान फ़ाइल आकार सीमा 18,446,744,073,709,551,616 वर्ण है या यदि आप बाइट्स पसंद करते हैं, या यहां तक ​​कि 2 ^ 64 बाइट्स यदि आप कम से कम 64 बिट इन्फ्रास्ट्रक्चर देख रहे हैं।

सभी इरादों, और प्रयोजनों के लिए हम इसे असीमित मान सकते हैं क्योंकि आपके पास शायद ही इस मुद्दे को मारने का कठिन समय होगा ...


-6

JSON स्ट्रिंग्स की अधिकतम लंबाई। डिफ़ॉल्ट 2097152 वर्ण है, जो यूनिकोड स्ट्रिंग डेटा के 4 एमबी के बराबर है।

URL के नीचे देखें

https://docs.microsoft.com/en-us/dotnet/api/system.web.script.serialization.javascriptserializer.maxjsonlength?view=netframework-4.7.2


2
JSON की अपनी कोई अंतर्निहित सीमा नहीं है। आपने जो पोस्ट किया है वह .net और उसके JavaScriptSerializerवर्ग के लिए विशिष्ट है । और MaxJsonLengthपहले से ही अन्य उत्तरों में संबोधित किया गया है।
डेविड मकोगन

क्या कोई पोस्ट कर सकता है कि बड़े को कैसे संभालना है। .NET जावास्क्रिप्ट सर्वर? उदाहरण के लिए, मैं एमवीसी नियंत्रक को एक बड़ा जसन कैसे भेज सकता हूं लेकिन न्यूटनसॉफ्ट के धारावाहिक को उपयोग करने के लिए इसे संभाल सकता हूं या क्या यह संभव नहीं है क्योंकि इसे .NET में बनाया गया है और पूर्व नियंत्रक का उपयोग किया जा रहा है?
केसी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.