JSON কতটা ধরে রাখতে পারে তার কোনও সীমা আছে?


163

আমি একটি মন্তব্য সিস্টেমের জন্য jquery, JSON এবং AJAX ব্যবহার করছি। আমি কৌতূহলী, আপনি JSON এর মাধ্যমে / স্টোরটি কী পাঠাতে পারবেন তার কোনও আকারের সীমা আছে? যদি কোনও ব্যবহারকারী কোনও বড় পরিমাণ টাইপ করেন এবং আমি এটি JSON এর মাধ্যমে প্রেরণ করি তবে কি সীমাবদ্ধতার কোনও প্রকার আছে?

এছাড়াও জেএসএনের মাধ্যমে যে কোনও ধরণের পাঠ্য পাঠানো যেতে পারে। উদাহরণস্বরূপ আমি ব্যবহারকারীদের এইচটিএমএল ব্যবহার করার অনুমতি দিই, এটি কি ঠিক হবে?


9
আপনি নীচের লোকদের উত্তর ব্যাখ্যা কিভাবে সাবধান! বেশিরভাগ উত্তর বলে যে 'জেএসএন'-এর কোনও সীমা নেই। যদিও বেশিরভাগ সার্ভারের একটি কনফিগারযোগ্য সীমা থাকবে। আমি একটি সাধারণ এজেএক্স পরীক্ষা চালিয়েছি যেখানে আমি প্রতিটি প্রেরণে বাইট বাড়িয়েছি এবং প্রায় 8K বাইটে, এটি এখন চেষ্টা করা বেশ কয়েকটি পিএইচপি / অ্যাপাচি সার্ভারগুলিতে ব্যর্থ হয়েছিল।
ত্রুটিটি

3
আমরা নির্ভরযোগ্যভাবে আইওএস / আইফোনে 100 কেবি পেਲੋਡগুলি প্রেরণ / গ্রহণ করি। সাবধান হওয়ার কিছু বিষয় হ'ল অনেকগুলি প্রোটোকল খণ্ডগুলিতে ডেটা গ্রহণ করে এবং সমস্ত ডেটা প্রাপ্ত হওয়ার জন্য অপেক্ষা না করে খণ্ডটি ডিসিলায়ালাইজ করার চেষ্টা করার ফলে ব্যর্থতা দেখা দিতে পারে, যদি না আপনার ডিসিরিয়ালাইজার যুক্তি এটির জন্য বিশেষভাবে সেট আপ করা হয়।
হট লিক্স

1
@ জ্যাচ - ডেটা ট্রান্সমিশনটি 8 কে ব্লকে বিভক্ত হওয়ার পরে প্রায়শই ব্যর্থতা হয়েছিল, পরে বিশ্লেষণ করার চেষ্টা করার আগে অন্য প্রান্তে সঠিকভাবে পুনরায় সংশ্লেষ করা হয়নি।
হট লিকস

1
@ জ্যাচ - এটি একটি সাধারণ কোডিং ত্রুটি। একটি অনুরোধ বনাম প্রথম প্রতিক্রিয়া বার্তার জন্য অপেক্ষা করা বনাম শেষের জন্য অপেক্ষা করা এবং একসাথে প্রতিক্রিয়া ডেটার সাথে যুক্ত করা। প্রতিটি প্রতিক্রিয়ায় সর্বাধিক 8 কে থাকবে, সুতরাং দীর্ঘ তথ্যের জন্য একাধিক প্রতিক্রিয়া ব্যবহৃত হয়।
হট লিক্স

1
@ জেচ - আপনি যদি কোনও স্ট্যান্ডার্ড এনএসআরএল সংযোগে আইওএসে এটি করছেন, আপনাকে connectionDidFinishLoadingসেখানে জেএসওএন অনুবাদ কার্যকর করতে হবে (বা তার পরে ডাকা হওয়ার পরে) হবে না didReceiveData(যেখানে আপনার পূর্ববর্তী তারিখের সাথে প্রাপ্ত তথ্যটি সহজেই বোঝানো উচিত ) গৃহীত)। অন্যান্য পরিবেশও একই রকম।
হট লিক্স

উত্তর:


141

জেএসওএন এক্সএমএলের মতো অন্যান্য ডেটা ফর্ম্যাটগুলির অনুরূপ - আপনার যদি আরও ডেটা প্রেরণ করতে হয় তবে আপনি কেবল আরও ডেটা প্রেরণ করেন। জেএসএন অনুরোধের কোনও সহজাত আকারের সীমাবদ্ধতা নেই। সার্ভারের দ্বারা অনুরোধটি বিশ্লেষণ করে কোনও সীমাবদ্ধতা সেট করা হবে। (উদাহরণস্বরূপ, এএসপি.এনইটির কাছে সিরিয়ালটির "ম্যাক্সজসনলেন্থ" সম্পত্তি রয়েছে))


1
এত প্রযুক্তিগতভাবে, আমি যদি পুরো পৃষ্ঠায় পুরো সোর্সকোডটি নিয়ে যেতে চাইতাম তবে এটি কোনও জসন অবজেক্ট হিসাবে পাঠানো যেতে পারে?
জেসনডাভিস

এই পৃষ্ঠার কোডটি কেবলমাত্র 6.7kb (বাহ্যিক সংস্থান গণনা করছে না)। এটি সহজেই কোনও ধরণের এইচটিটিপি অনুরোধের সাহায্যে সম্পন্ন হবে।
অ্যাম্বার

15
এটি লক্ষণীয় যে অ্যাম্বরের JavaScriptSerializer.MaxJsonLengthউত্তরে বর্ণিত সম্পত্তিটির জন্য "ডিফল্টটি হ'ল 2097152 টি অক্ষর, যা ইউনিকোড স্ট্রিং ডেটা 4 এমবি সমান" । (এনবি আমি এমএসডিএন থেকে উদ্ধৃত করেছি )
ডাম্বলডেড

তাহলে আমি কীভাবে একটি 155kb জেএসএন বস্তুকে পার্স করব?
রায়

2
@ আসাদহসান একটি সার্ভার ডেটা যে দিকের দিকে চলেছে তার উপর নির্ভর করে পার্স বা সিরিয়াল তৈরি করতে পারে।
আম্বর

18

কোনও JSON ডেটা ব্লক বা ক্ষেত্রগুলির মধ্যে কত বড় তার কোনও নির্দিষ্ট সীমা নেই।

বিভিন্ন ব্রাউজারগুলির জাভাস্ক্রিপ্ট বাস্তবায়ন কতটা JSON পরিচালনা করতে পারে তার সীমাবদ্ধতা রয়েছে (যেমন আমার অভিজ্ঞতায় প্রায় 40MB)। উদাহরণস্বরূপ এই প্রশ্নটি দেখুন ।


4
8 কে জেএসএনের জন্য ব্যতিক্রমী একটি ছোট সীমা। আমি সন্দেহ করি যে এটি JSON এর সীমা নয়, বরং 8K ব্লকে ডেটা স্থানান্তরিত হচ্ছে, এবং ডেটা প্রাপ্ত কোডটি পুরো পেওডের আগমনের অপেক্ষা না করে একটি পৃথক ব্লকের deserialize করার চেষ্টা করছে।
হট লিক্স

আমি বাজি ধরতাম তুমি সঠিক হট লিকস আমি আমার উত্তর আপডেট।
সিডিগিংস

9

এটি আপনার JSON রাইটার / পার্সার প্রয়োগের উপর নির্ভর করে। মাইক্রোসফ্টের ডেটা কন্ট্রাক্ট জসনসিরাইজারের মনে হয় 8kb (8192 আমার মনে হয়) এর শক্ত সীমা রয়েছে এবং এটি বড় স্ট্রিংয়ের জন্য ত্রুটিযুক্ত হবে।

সম্পাদনা: এই জবাবটিতে বর্ণিত হিসাবে ওয়েব কনফিগারেশনে ম্যাকজেসসনলেন্থ সম্পত্তি সেট করে আমরা জেএসএন স্ট্রিংয়ের জন্য 8K সীমাটি সমাধান করতে পেরেছিলাম: https://stackoverflow.com/a/1151993/61569


5
একটি 8 কে "সীমা" প্রায় অবশ্যই একটি ডেটা ট্রান্সমিশন ব্লক সীমানা, কোনও জেএসএন নথির সীমা নয়। বৃহত্তর স্ট্রিংগুলি মাল্টি-ব্লক সংক্রমণকে সঠিকভাবে পুনরায় সমাবেশ করে প্রক্রিয়া করা যায়।
হট লিক্স

অনেক দিন হলো আমরা মূর্ত আউট DataContractJsonSerializer মধ্যে 8K সীমা পরিবর্তন কিভাবে হয়েছে, কিন্তু আমি মনে করি এটা ছিল "MaxJsonLength" সেটিং ( msdn.microsoft.com/en-us/library/... )
এন্থনি এফ

5

জেএসওএন ডেটা প্রেরণ বা গ্রহণের আকারের আসলেই কোনও সীমা নেই। আমরা ফাইলটিতে জসন ডেটা প্রেরণ করতে পারি। আপনি যে ব্রাউজারটির সাথে কাজ করছেন সেগুলি অনুসারে, জসন ডেটা পরিচালনা করা যায়।


5

আকারগুলি সহ জেএসএন নথির সীমা নির্ধারণের জন্য প্রয়োগগুলি নিখরচায়, সুতরাং আপনার পার্সারটি বুদ্ধিমানের সাথে চয়ন করুন। আরএফসি 7159 , বিভাগ 9 দেখুন।

"একটি বাস্তবায়ন গ্রহন করে এমন পাঠ্যের আকারের সীমাবদ্ধতা নির্ধারণ করতে পারে An একটি বাস্তবায়ন নীড়ের সর্বাধিক গভীরতার উপর সীমা নির্ধারণ করতে পারে An একটি বাস্তবায়ন সংখ্যার পরিসর এবং নির্ভুলতার সীমা নির্ধারণ করতে পারে An একটি বাস্তবায়ন দৈর্ঘ্য এবং চরিত্রের সীমা নির্ধারণ করতে পারে স্ট্রিং এর বিষয়বস্তু। "


3

আপনি যদি এএসপি.নেট এমভিসির সাথে কাজ করছেন তবে আপনি নিজের ফলাফলটিতে ম্যাকজেসনলেন্থ যুক্ত করে সমস্যার সমাধান করতে পারেন :

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

তবে এটি সর্বাধিক 4MB করে তোলে এবং আমাদের এটি আরও বেশি প্রয়োজন। আমরা কীভাবে সেই পরিস্থিতি পরিচালনা করতে পারি?
কেসি

@ ক্যাসি - 4MB এর বাইরে আপনার জন্য কী লক্ষণ দেখা দেয়? স্বাক্ষরিত 32-বিট পূর্ণসংখ্যা 2 বিলিয়নে যায় - আপনার আকার সীমাবদ্ধ করে অন্য কোথাও কিছু থাকতে হবে। ডিফল্ট MaxJsonLength মান 2M ইউনিকোড অক্ষর, তাই 4 মেগাবাইট। উপরের কোডটি ম্যাকজেসনলেন্থকে আরও বড় মান বাড়িয়ে তুলছে । হতে পারে "খুব বড়" হিসাবে প্রত্যাখ্যান করা হয়েছে - অন্য আকারের চেষ্টা করুন এবং দেখুন আপনি কতটা বড় হতে পারেন। int.MaxValue
টুলমেকারস্টেভ

আপনি কি জানেন, আপনার সঠিক। আমি সম্ভবত একটি ফ্লাস ত্রুটি বুদবুদ পেয়ে যাচ্ছি বা এটি সেটিংটি ব্যবহার করছে না। আমি এই প্রাক নিয়ামকটি করার চেষ্টা করছি, ফলাফলের ভিত্তিতে নয়। আমি যখন কোনও জসন অবজেক্ট পাঠানোর চেষ্টা করি যা কন্ট্রোলার কলের চেয়ে বড় হয়, আমি যদি বিকাশকারী সরঞ্জামগুলি ব্যবহার করি এবং অনুরোধ সার্ভারের দিকটি ডিবাগ করে দেয় তবে জাসন সীমাটি ছাড়িয়ে গেছে returning
কেসি

এটি আমার সমস্যা, মাইক্রোসফ্টের প্রতি ওয়েবসাইটে কীভাবে এটি পাওয়া যায়। "মূলত," অভ্যন্তরীণ "জাভাস্ক্রিপ্টসরিয়ালাইজার ওয়েব পদ্ধতি থেকে যখন কল করা হয় তখন ম্যাকজেসনলেন্থের মানকে সম্মান করে a .scriptting.webServices.jsonSerialization বিভাগ যা আপনি ওয়েব.কমফিগ ফাইলে সংজ্ঞায়িত করেছেন। "
কেসি

আমি প্রায় অবাক হয়েছি যদি আমি বলতে পারি যে, তালিকা <টাইপ স্ট্রিং> এর মতো 50k এর কিছু অংশকে কিছু ভাঙ্গুন, তারপরে এটি নিয়ামককে প্রেরণ করুন, এবং স্ট্রিং বোল্ডার করুন, তারপরে এসকিউএল-এ আমদানি করুন।
কেসি

2

নিশ্চয়ই এখানে সবাই একটি কৌশল মিস করেছে। একটি জসন ফাইলের বর্তমান ফাইলের আকারের সীমাটি 18,446,744,073,709,551,616 টি অক্ষর বা আপনি বাইট পছন্দ করেন, বা এমনকি যদি আপনি কমপক্ষে 64 বিট অবকাঠামোগুলি দেখছেন তবে 2 ^ 64 বাইট।

সমস্ত উদ্দেশ্য এবং উদ্দেশ্যগুলির জন্য আমরা ধরে নিতে পারি যে এটি সীমাহীন issue


-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
জেএসএনের নিজেই কোনও সহজাত সীমা নেই। আপনি যা পোস্ট করেছেন তা নেট এবং এর JavaScriptSerializerশ্রেণীর জন্য নির্দিষ্ট । এবং MaxJsonLengthইতিমধ্যে অন্যান্য উত্তরে সম্বোধন করা হয়েছে।
ডেভিড মাকোগন

.ET নেট জাভাস্ক্রিপ্টসরিয়ালাইজার কীভাবে কীভাবে আরও বড় হ্যান্ডেল করা যায়? উদাহরণস্বরূপ, আমি কীভাবে এমভিসি নিয়ামককে একটি বৃহত জসন প্রেরণ করতে পারি তবে এটি পরিচালনা করতে নিউটনসফ্টের সিরিয়ালাইজারটি ব্যবহার করতে পারি বা এটি নেট। এনইটি-তে অন্তর্নির্মিত হওয়ার পরে এবং প্রাক প্রাক কন্ট্রোলার আঘাত হানার পরে এটি কি সম্ভব নয়?
কেসি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.