ন্যূনতম বৈধ JSON কি?


174

আমি সাবধানে জেএসওএন বিবরণ http://json.org/ পড়েছি তবে আমি নিশ্চিত নই যে আমি সহজ প্রশ্নের উত্তর জানি। ন্যূনতম সম্ভাব্য বৈধ JSON কী স্ট্রিং?

  • "string" স্ট্রিংটি বৈধ JSON?
  • 42 সহজ নম্বরটি কী বৈধ JSON?
  • true বুলিয়ান মান একটি বৈধ JSON?
  • {} খালি বস্তুটি কী বৈধ JSON?
  • [] খালি অ্যারে একটি বৈধ JSON?

12
Jsonlint.com এ পরীক্ষা করা , শেষ দুটি বৈধ, অন্যটি নেই।
আয়রনসিতো

1
কিছু জেএসএন পার্সার একটি অ্যারে বা একটি অবজেক্ট আশা করে। তারা কেবল একটি সংখ্যা বা একটি স্ট্রিং সম্পর্কে অভিযোগ করে।
আকোনসু

3
এখন পর্যন্ত, সেগুলি বৈধ
ব্রায়ান কোলাভিটো


সংক্ষিপ্ত উত্তর - {}
টুকরাম ভোসলে

উত্তর:


156

লেখার সময়, জেএসএন সম্পূর্ণরূপে আরএফসি 4627 এ বর্ণিত ছিল । এটি JSON পাঠকে সিরিয়ালযুক্ত বস্তু বা অ্যারে হিসাবে বর্ণনা করেছে ("2" এর শুরুতে) start

এর অর্থ হল যে কেবল {} এবং []বৈধ, পার্সার এবং স্ট্রিংফায়ারগুলিতে JSON স্ট্রিংগুলি সম্পূর্ণ হয় যা সেই মানটিকে মেনে চলে।

তবে , ইসিএমএ -404 এর পরিচিতি পরিবর্তিত হয় এবং আপডেট পরামর্শটি এখানে পড়তে পারেন । আমি ইস্যুতে একটি ব্লগ পোস্ট লিখেছি


তবে বিষয়টি আরও বিভ্রান্ত করার জন্য, ওয়েব ব্রাউজারগুলিতে উপলভ্য JSONঅবজেক্টটি (যেমন JSON.parse()এবং JSON.stringify()) ES5 তে মানক করা হয়েছে এবং এটি স্পষ্টভাবে গ্রহণযোগ্য জেএসওএন পাঠ্যকে সংজ্ঞায়িত করে:

এই স্পেসিফিকেশনে ব্যবহৃত JSON ইন্টারচেঞ্জ ফর্ম্যাটটি হ'ল আরএফসি 4627 দুটি ব্যতিক্রম সহ বর্ণিত:

  • আরসিএফসিএস 4627 দ্বারা উল্লিখিত JSONObject বা JSONArray হিসাবে সীমাবদ্ধ না হয়ে ECMAScript JSON ব্যাকরণের শীর্ষ স্তরের জেএসএনটেক্সট উত্পাদনটি কোনও JSONValue সমন্বিত থাকতে পারে।

  • স্নিপেড

এর অর্থ এই হবে যে সমস্ত জেএসওএন মানগুলি (স্ট্রিং, নালস এবং সংখ্যাগুলি সহ) জেএসওএন বস্তু দ্বারা গৃহীত হয়েছে, যদিও জেএসওএন অবজেক্টটি প্রযুক্তিগতভাবে আরএফসি 4627 মেনে চলে।

নোট করুন যে অতএব আপনি কনফর্মেন্ট ব্রাউজারে এমন একটি নম্বর JSON.stringify(5)দিয়ে স্ট্রাইফাই করতে পারবেন যা আরএফসি 4627 মেনে চলা অন্য কোনও পার্সার দ্বারা প্রত্যাখ্যাত হবে, তবে এর উপরে উল্লিখিত নির্দিষ্ট ব্যতিক্রম নেই। উদাহরণস্বরূপ, রুবি এমন একটি উদাহরণ বলে মনে হবে যা কেবলমাত্র বস্তু এবং অ্যারেটিকে মূল হিসাবে গ্রহণ করে । অন্যদিকে পিএইচপি বিশেষত ব্যতিক্রম যুক্ত করে যে "এটি স্কেলারের ধরণ এবং এনওএলএলকে এনকোড এবং ডিকোডও করবে"।


@ আমডোররা: আপনি যেখানে দেখছেন সেখানে কি আরও সুনির্দিষ্ট হতে পারেন?
ম্যাট

5
জেএসএন কোনও বিশেষ্য নয়, সুতরাং "একটি জেএসওএন" অর্থহীন। যে কোনও "জেএসএন মান" একটি "জেএসওএন মান", তবে পার্সাররা প্রায়শই সেই আরএফসিতে সংজ্ঞায়িত "জেএসএন পাঠ্য" আশা করে।
IMSoP

2
আমার খারাপ আমি আমার উত্তরটি তখন মুছে
ফেলব

1
@ জোমরনো আপনি কি আপনার মন্তব্যটি পরিষ্কার করতে পারবেন? আপনি কি বলছেন true, falseবা nullএকা বৈধ JSON পাঠ্য? আপনি কি দয়া করে কোনও উত্স উদ্ধৃত করতে পারেন, কেননা এটি এখানে অন্যান্য উত্তর / মন্তব্যের বেশিরভাগের বিপরীত?
লরেন্স জনস্টন

2
@ জোমরনো: অবশ্যই বিভাগ 2 এর উদ্ধৃতি "একটি জেএসওএন পাঠ্য সিরিয়ালযুক্ত বস্তু বা অ্যারে is" যে বিরোধিতা? জেএসএন লিন্ট কোনও অ-অ্যারে বা বস্তুটি বৈধ বলেও মনে করে না। স্ট্রিংটি বৈধ JSON আক্ষরিক কিনা তা নিয়ে কোনও বিতর্ক নেই; এটি নিজেই কোনও স্ট্রিং বৈধ কিনা তা শেষ।
ম্যাট

42

কমপক্ষে চারটি নথি রয়েছে যা ইন্টারনেটে জেএসওএন মান হিসাবে বিবেচিত হতে পারে। আরএফসিরা রেফারেন্সযুক্ত সমস্ত মাইম প্রকার বর্ণনা করে application/json। শীর্ষ স্তরের মানগুলি সম্পর্কে প্রত্যেকের যা বলতে হবে তা এখানে রয়েছে এবং শীর্ষে কোনও বস্তু বা অ্যারে ব্যতীত অন্য কিছু অনুমোদিত কিনা:

আরএফসি -42727 : না

একটি JSON পাঠ্য টোকেনের ক্রম। টোকেনের সেটটিতে ছয়টি কাঠামোগত অক্ষর, স্ট্রিং, সংখ্যা এবং তিনটি আক্ষরিক নাম অন্তর্ভুক্ত রয়েছে।

একটি JSON পাঠ্য সিরিয়ালযুক্ত বস্তু বা অ্যারে।

জেএসএন-পাঠ্য = অবজেক্ট / অ্যারে

দ্রষ্টব্য যে আরএফসি-4627 "প্রস্তাবিত মান" এর বিপরীতে "তথ্যবহুল" হিসাবে চিহ্নিত হয়েছিল এবং এটি আরএফসি -7159 দ্বারা অচল হয়ে গেছে , যা পরিবর্তে আরএফসি -8259 দ্বারা অচল হয়ে গেছে।

আরএফসি -8259 : হ্যাঁ।

একটি JSON পাঠ্য টোকেনের ক্রম। টোকেনের সেটটিতে ছয়টি কাঠামোগত অক্ষর, স্ট্রিং, সংখ্যা এবং তিনটি আক্ষরিক নাম অন্তর্ভুক্ত রয়েছে।

একটি JSON পাঠ্য একটি ক্রমিক মান। নোট করুন যে JSON এর পূর্ববর্তী নির্দিষ্ট কিছু নির্দিষ্টকরণগুলি একটি JSON পাঠ্যকে একটি বস্তু বা অ্যারে হিসাবে আবদ্ধ করেছিল। যে বাস্তবায়নগুলি কেবলমাত্র অবজেক্ট বা অ্যারে তৈরি করে যেখানে একটি জেএসএন পাঠ্য কল করা হয়েছিল সেই অর্থে আন্তঃযোগযোগ্য হবে যে সমস্ত বাস্তবায়ন এগুলি JSON পাঠ্যকে মেনে চলবে।

জেএসওএন-পাঠ্য = ডাব্লু মান ডাব্লু

আরএফসি -8259 ডিসেম্বর 2017 তারিখে এবং "ইন্টারনেট স্ট্যান্ডার্ড" হিসাবে চিহ্নিত করা হয়েছে।

ইসমা -২2২ : হ্যাঁ।

জেএসওএন সিনট্যাকটিক ব্যাকরণ জাসন লেক্সিকাল ব্যাকরণ দ্বারা সংজ্ঞায়িত টোকেনের ক্ষেত্রে একটি বৈধ জেএসএন পাঠ্যকে সংজ্ঞায়িত করে। ব্যাকরণের লক্ষ্য প্রতীকটি JSONText।

সিনট্যাক্স জেএসটেক্সট:

JSONValue

জেএসএনভ্যালু:

JSONNullLiteral

JSONBooleanLiteral

JSONObject কে অবশ্যই

JSONArray

JSONString

JSONNumber

ইসমা -404 : হ্যাঁ।

একটি জেএসওএন পাঠ্যটি ইউনিকোড কোড পয়েন্ট থেকে তৈরি টোকেনগুলির একটি ক্রম যা জেএসওএন মান ব্যাকরণের সাথে সঙ্গতিপূর্ণ। টোকেনের সেটটিতে ছয়টি কাঠামোগত টোকেন, স্ট্রিং, সংখ্যা এবং তিনটি আক্ষরিক নাম টোকেন অন্তর্ভুক্ত রয়েছে।


10

আরএফসি 4627 এর পুরানো সংজ্ঞা অনুসারে (যা মার্চ 2014 এ আরএফসি 7159 দ্বারা বাতিল করা হয়েছিল), সেগুলি সমস্ত বৈধ "জেএসএন মান" ছিল, তবে কেবল শেষ দুটিই একটি সম্পূর্ণ "জেএসএন পাঠ্য" গঠন করবে:

একটি JSON পাঠ্য সিরিয়ালযুক্ত বস্তু বা অ্যারে।

ব্যবহৃত পার্সারের উপর নির্ভর করে লোন "জেএসএন মান" যেভাবেই গ্রহণযোগ্য হতে পারে। উদাহরণস্বরূপ ("JSON মান" বনাম "JSON পাঠ্য" পরিভাষা আঁকড়ে):

  • JSON.parse()ফাংশন এখন আধুনিক ব্রাউজারে আদর্শায়িত কোন "তাদেরকে JSON মান" গ্রহণ করে
  • পিএইচপি ফাংশনটি json_decode5.2.0 সংস্করণে কেবলমাত্র একটি সম্পূর্ণ "জেএসএন পাঠ্য" গ্রহণ করে চালু করা হয়েছিল, তবে সংস্করণ 5.2.1-এ কোনও "জেএসওএন মান" গ্রহণ করতে সংশোধন করা হয়েছিল
  • পাইথনের এই ম্যানুয়াল পৃষ্ঠায়json.loads উদাহরণ অনুসারে যেকোন "জেএসওএন মান" স্বীকার করে
  • http://jsonlint.com এ যাচাইকারী সম্পূর্ণ "জেএসএন পাঠ্য" প্রত্যাশা করে
  • রুবি জেএসএন মডিউল কেবল একটি সম্পূর্ণ "জেএসএন পাঠ্য" গ্রহণ করবে (কমপক্ষে এই ম্যানুয়াল পৃষ্ঠায় মন্তব্য অনুসারে )

পার্থক্যটি একটি "এক্সএমএল ডকুমেন্ট" এবং "এক্সএমএল খণ্ড" এর মধ্যে পার্থক্যের মতো, যদিও প্রযুক্তিগতভাবে <foo />একটি সুগঠিত এক্সএমএল নথি (এটি আরও ভাল হিসাবে লিখিত হবে <?xml version="1.0" ?><foo />তবে মন্তব্যে নির্দেশিত হিসাবে , <?xmlঘোষণাটি প্রযুক্তিগতভাবে technচ্ছিক )।


এক্সএমএল তুলনা অনুপযুক্ত হতে পারে, কারণ একটি এক্সএমএল ডকুমেন্ট alচ্ছিক এক্সএমএল ঘোষণা ছাড়াই সম্পূর্ণ বৈধ। এক্সওএমএল
গুন্থার

@ গুঞ্জার আহ, হ্যাঁ, আমি ভুলে গিয়েছিলাম যে এটি প্রযুক্তিগতভাবে optionচ্ছিক, যদিও উচ্চ উত্সাহিত হয়েছিল।
আইএমএসওপি

@ গুন্থার: একটি নিটপিক: <foo />একটি সুগঠিত এক্সএমএল ডকুমেন্ট, তবে এটি বৈধ নয় । (তবে একই কথা সত্য <?xml version="1.0" ?><foo />।)
রুখ

@রুখ মজার বিষয়, এখানে সংজ্ঞাটি বোঝায় যে এক্সএমএল কেবলমাত্র একটি ডিটিডি এর বিপরীতে "বৈধ" হতে পারে, যার অর্থ খুব কম এক্সএমএল নথি, যেমন ডিটিডি খুব কমই লিখিত হয় এবং বাস্তবে ঘোষিত হয় (এক্সএসডি বা রিল্যাক্সএনজির মতো স্কিমা সংজ্ঞা ফর্ম্যাটগুলির তুলনায়) । আমি যাচাই করছিলাম, কারণ যদি আপনি কোনও বাহ্যিক স্কিমার বিরুদ্ধে এটি উল্লেখ <foo /> না করে বৈধ হতে পারেন তবে নির্দিষ্ট স্কিমার বিরুদ্ধে বৈধ হতে পারে বা নাও হতে পারে , তবে এটি সেই স্ট্যান্ডার্ডটি বলে না।
IMSoP

4

ইমা স্পেসিফিকেশন রেফারেন্সের জন্য দরকারী হতে পারে:

http://www.ecma-international.org/ecma-262/5.1/

পার্স ফাংশনটি একটি জেএসওএন পাঠ্য (একটি জেএসওএন-ফর্ম্যাটযুক্ত স্ট্রিং) পার্স করে এবং একটি ইসমাস্ক্রিপ্ট মান তৈরি করে। JSON ফর্ম্যাটটি ECMAScript আক্ষরিকের একটি সীমিত আকার। JSON অবজেক্টগুলি ECMAScript অবজেক্ট হিসাবে উপলব্ধি করা হয়েছে। JSON অ্যারেগুলি ECMAScript অ্যারে হিসাবে উপলব্ধি করা হয়েছে। JSON স্ট্রিং, সংখ্যা, বুলিয়ান এবং নাল ECMAScript স্ট্রিংস, নাম্বার, বুলিয়ান এবং নাল হিসাবে উপলব্ধি করা হয়েছে। জেএসএন হোয়াইটস্পেসের চেয়ে সাদা স্পেস অক্ষরের আরও সীমিত সেট ব্যবহার করে এবং ইউনিকোড কোড পয়েন্টগুলি ইউ + 2028 এবং ইউ + 2029 কে সরাসরি পালানোর ক্রম ব্যবহার না করে সরাসরি জেএসএনস্ট্রিং লিটারে উপস্থিত হতে দেয়। পার্সিংয়ের প্রক্রিয়াটি 11.1.4 এবং 11.1.5 এর মতো যা জেএসএন ব্যাকরণ দ্বারা সীমাবদ্ধ।

JSON.parse("string"); // SyntaxError: Unexpected token s
JSON.parse(43); // 43
JSON.parse("43"); // 43
JSON.parse(true); // true
JSON.parse("true"); // true
JSON.parse(false);
JSON.parse("false");
JSON.parse("trueee"); // SyntaxError: Unexpected token e
JSON.parse("{}"); // {}
JSON.parse("[]"); // []

4
যখন একটি দরকারী রেফারেন্স, এটি কোনও নির্দিষ্ট জেএসওন পার্সারের স্পেসিফিকেশন (যার নাম ECMAScript স্ট্যান্ডার্ডে সংজ্ঞায়িত করা হয়েছে) নিজেই বিন্যাসের জন্য নয়। json.org স্পষ্টতই বলেছে যে JSON "সম্পূর্ণরূপে ভাষা স্বাধীন", সুতরাং সঠিক পার্সার করার মতো কোনও নেই।
IMSoP

1
জাভাস্ক্রিপ্ট / ECMAScipt হ'ল JSON এর অনুপ্রেরণা এবং এর ব্যবহারকারী, তবে এটির "হোম" নয়। JSON ECMAScript তে (সমস্ত পূর্ববর্তী সংস্করণ) অবজেক্টের আক্ষরিক স্বরলিপি থেকে উদ্ভূত হয়েছিল, তবে এটির সাথে অভিন্ন নয়। JSON.parseফাংশন তারপর এর নাম ECMAScript প্রমিত Crockford এর ব্যাকরণ ও বোঝায় যা RFC উপর ভিত্তি করে পরবর্তী সংস্করণগুলো যোগ করা হয়েছিল।
আইএমএসওপি

4
আপনার করা উচিতJSON.parse("\"string\"");
অ্যারিকবিএন

4

JSON এর অর্থ জাভাস্ক্রিপ্ট অবজেক্ট নোটেশন। শুধু {}এবং []একটি জাভাস্ক্রিপ্ট অবজেক্ট নির্ধারণ করুন। অন্যান্য উদাহরণগুলি হ'ল মান আক্ষরিক। সেই মানগুলির সাথে কাজ করার জন্য জাভাস্ক্রিপ্টে অবজেক্টের ধরণ রয়েছে তবে অভিব্যক্তিটি "string"কোনও অবজেক্টের নয় আক্ষরিক মানের উত্স কোড উপস্থাপনা।

মনে রাখবেন যে JSON জাভাস্ক্রিপ্ট নয়। এটি এমন একটি স্বরলিপি যা ডেটা উপস্থাপন করে। এটির একটি খুব সাধারণ এবং সীমাবদ্ধ কাঠামো রয়েছে। JSON ডেটা {},:[]অক্ষর ব্যবহার করে কাঠামোগত করা হয়েছে । আপনি এই কাঠামোর ভিতরে কেবল আক্ষরিক মান ব্যবহার করতে পারেন।

কোনও সার্ভারের পক্ষে কোনও অবজেক্টের বিবরণ বা আক্ষরিক মান দিয়ে প্রতিক্রিয়া জানানো পুরোপুরি বৈধ। সমস্ত JSON পার্সারকে কেবল একটি আক্ষরিক মান হ্যান্ডেল করা উচিত, তবে কেবল একটি মান। JSON একবারে কেবল একটি একক বস্তুর প্রতিনিধিত্ব করতে পারে। সুতরাং কোনও সার্ভারের একাধিক মান ফেরত দেওয়ার জন্য এটিকে একটি অবজেক্ট বা অ্যারে হিসাবে কাঠামো করতে হবে।


1
আমি মনে করি যে এই দিক থেকে উত্তরটি কাছে পৌঁছানো তার চেয়ে আরও জটিল হয়ে উঠেছে: নামটির উত্সটির মানের বিবরণে কোনও প্রভাব নেই এবং জাভাস্ক্রিপ্টে প্রাপ্ত প্রকারগুলি জেএসএন-তে প্রকারের জন্য অনুপ্রেরণা হতে পারে, তবে কোনও প্রয়োজন নেই তারা মিলছে। উপর ভূমিকা json.org এই স্পষ্ট করে তোলে: "তাদেরকে JSON একটি টেক্সট বিন্যাসে সম্পূর্ণরূপে ভাষা স্বাধীন যে"
IMSoP

@ আইএমএসপ আমি সম্পূর্ণরূপে একমত। আমি JSON এর সাথে জাভাস্ক্রিপ্টের প্রকারগুলি মিশ্রিত করেছি এবং এটি সঠিক নয়। আমি আমার উত্তর আপডেট করব।
চুল্লী

2

হ্যাঁ, হ্যাঁ, হ্যাঁ, হ্যাঁ, এবং হ্যাঁ। এগুলি সবই বৈধ JSON মান আক্ষরিক।

তবে সরকারী আরএফসি 4627 বলেছে:

একটি JSON পাঠ্য সিরিয়ালযুক্ত বস্তু বা অ্যারে।

সুতরাং একটি সম্পূর্ণ "ফাইল" এর একটি অবজেক্ট বা অ্যারের বহিঃস্থ কাঠামো হিসাবে থাকা উচিত, অবশ্যই কোনটি ফাঁকা থাকতে পারে। তবুও, অনেক জেএসএন পার্সার ইনপুট দেওয়ার জন্যও আদিম মানগুলি গ্রহণ করে।



-2

Json.org পৃষ্ঠায় প্রদত্ত রেলপথ চিত্রগুলি কেবল অনুসরণ করুন । [] এবং {} হ'ল ন্যূনতম সম্ভাব্য বৈধ JSON অবজেক্ট। সুতরাং উত্তরটি [] এবং}}}


3
এটি কোনও এফএসএম নয়, এটি ব্যাকরণ। এবং এটি দেখে মনে হয় না যে কোন উত্পাদনটি শুরুর নিয়ম। যদি শুরুর নিয়মগুলি থাকে arrayএবং objectআপনি সঠিক হয়ে থাকেন তবে এটি শুরু হওয়ার আশা valueকরা যুক্তিসঙ্গত ।

যদিও আমার কাছে মোটামুটি সোজা মনে হচ্ছে। ডগলাস ক্রকফোর্ড তাদের এটিকে ডাকে এবং আমরা সর্বদা বাম থেকে শুরু করে ডানদিকে ট্র্যাকগুলি অনুসরণ করি। সবচেয়ে ছোট ট্র্যাকটি ন্যূনতম বৈধ জেএসএন দেয়।
হৃষি

2
এটি যে নির্দিষ্ট ব্যাকরণের নিয়মের বিষয়ে আমি আপত্তি করছি তা আপনার ব্যাখ্যা নয়, এটি আপনি দুটি নিয়ম পছন্দ করেছেন এবং ধরে নিন যে একটি কেবল সেগুলি থেকে শুরু হতে পারে, অন্যদের থেকে নয়। আপনি যদি নিয়মগুলি এবং নিয়মগুলির valuesপরিবর্তে (বা অতিরিক্ত হিসাবে) তাকান , তবে স্ট্যান্ডেলোন সংখ্যা এবং স্ট্রিংগুলি একটি বৈধ জেএসওএন নথি। arrayobject

-1। প্রথমত, @ ডেলান উল্লেখ করেছেন যে, json.org এ ডায়াগ্রামের কোনও কিছুই বোঝায় না যে একটি পূর্ণ JSON পাঠ্য অবশ্যই একটি বস্তু বা অ্যারে হতে হবে; আপনি দুজনকে নির্বিচারে বেছে নিয়েছেন, json.org- এ কোনও কিছুর উপর ভিত্তি করে নয়। দ্বিতীয়ত, পরিভাষাটির উপরে নীটপিক করা: []যদিও এই বিষয়ে কোনও মতামত প্রতিটি অনুমানের অধীনে একটি বৈধ জেএসওএন পাঠ্য কোনও "বৈধ জেএসএন অবজেক্ট" নয়, যেহেতু এটি কোনও জেএসএন অবজেক্ট নয়। জেএসএন-তে "অবজেক্ট" বিশেষভাবে চিহ্নিতকরণকে বোঝায় {}; JSON অ্যারেগুলি JSON অবজেক্ট নয়।
মার্ক এ Amery
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.