JSON কীগুলির জন্য উদ্ধৃত স্ট্রিংগুলি ব্যবহার করার কোনও ব্যবহারিক কারণ আছে?


88

Crockford এর মতে json.org , একটি JSON- বস্তুর গঠিত সদস্যদের , যা গঠিত জোড়া

প্রতিটি যুগল একটি তৈরি করা হয় স্ট্রিং এবং মান একটি সঙ্গে, স্ট্রিং হিসেবে সংজ্ঞায়িত করা হচ্ছে:

একটি স্ট্রিং শূন্য বা আরও বেশি ইউনিকোড অক্ষরগুলির অনুক্রম, ডাবল উদ্ধৃতিতে মোড়ানো, ব্যাকস্ল্যাশ পলায়ন ব্যবহার করে। একটি অক্ষর একটি একক অক্ষরের স্ট্রিং হিসাবে প্রতিনিধিত্ব করা হয়। একটি স্ট্রিং অনেকটা সি বা জাভা স্ট্রিংয়ের মতো।

তবে অনুশীলনে বেশিরভাগ প্রোগ্রামার এমনকি জানে না যে একটি JSON কী চারপাশে ডাবল উদ্ধৃতি দ্বারা আবদ্ধ হওয়া উচিত, কারণ বেশিরভাগ ব্রাউজারের ডাবল উদ্ধৃতি ব্যবহারের প্রয়োজন হয় না।

ডাবল কোটে আপনার জেএসএনকে ঘিরে বিরক্ত করার কোনও অর্থ কি?

বৈধ উদাহরণ:

{
  "keyName" : 34
}

অবৈধের বিপরীতে:

{
   keyName : 34
}

20
"কেন এটা ঠিক করতে বিরক্ত কর?" এটি এমন এক ধরণের অলস চিন্তাভাবনা যা অবৈধ মার্কআপ নিয়ে ভরা ওয়েবসাইটগুলিতে নিয়ে যায়। ভবিষ্যত প্রমাণ ক্ষেত্রে আপনার কোড কিছু ব্রাউজার নেই উদ্ধৃতি চিহ্ন প্রয়োজন।
মেগার

21
"কেন এটা ঠিক করতে বিরক্ত কর?" - সত্যিকারের সুবিধা না থাকলে কেন এমন কোনও সম্মেলন অনুসরণ করতে বিরক্ত করবেন? সম্ভবত আপনি অলস চিন্তাকে ব্যবহারিকতার সাথে বিভ্রান্ত করছেন।
মার্ক রজার্স

15
@ মার্ক - "যে অন্য কেউ করেন না" ... আপনি কোথায় এই ধারণা পেয়েছেন? প্রতিটি বড় প্ল্যাটফর্মের মধ্যে নির্মিত জেএসএন সিরিয়ালাইজার সঠিক উদ্ধৃতি দেয়।
নিক ক্র্যাভার

7
@ মার্ক রজার্স পিএইচপি json_encode ফাংশন উদাহরণস্বরূপ, ডাবল উদ্ধৃত স্ট্রিং সহ বৈধ JSON উত্পাদন করে। হতে পারে আপনি জাভাস্ক্রিপ্টে অবজেক্ট লিটারেলের কথা ভাবছেন? সত্য যে কীগুলি উদ্ধৃতি না দিয়ে কাজ করে তবে এটি জেএসএন নয় ON
জাল

9
রেকর্ডের জন্য, কয়েক বছর আগে আমি যখন এটি পোস্ট করেছি, @ জাল প্রস্তাবিত হিসাবে আমি JSON এবং অবজেক্ট আক্ষরিক স্বরলিপি মধ্যে পার্থক্য সম্পর্কে বিভ্রান্ত হয়ে পড়েছিলাম। দু'জনের মধ্যে একটি খুব মিল রয়েছে, এটি শেষ পর্যন্ত সমস্যাটি বর্ণনা করতে কিছু বিভ্রান্তির কারণ ঘটল।
মার্ক রজার্স

উত্তর:


157

JSON কীগুলি কেন উদ্ধৃতিতে হওয়া উচিত তা সম্পর্কে আসল কারণ, ECMAScript 3 এর সনাক্তকারীগুলির শব্দার্থবিজ্ঞানের উপর নির্ভর করে।

সংরক্ষিত শব্দগুলি উদ্ধৃতি ব্যতীত অবজেক্ট লিটারালসে সম্পত্তির নাম হিসাবে ব্যবহার করা যায় না , উদাহরণস্বরূপ:

({function: 0}) // SyntaxError
({if: 0}) // SyntaxError
({true: 0}) // SyntaxError
// etc...

আপনি যদি উদ্ধৃতি ব্যবহার করেন তবে সম্পত্তির নামগুলি বৈধ:

({"function": 0}) // Ok
({"if": 0}) // Ok
({"true": 0}) // Ok

নিজস্ব ক্রকফোর্ড এই আলোচনায় এটি ব্যাখ্যা করে , তারা জেএসএন স্ট্যান্ডার্ডকে সহজ রাখতে চেয়েছিল এবং তারা এটিতে এই সমস্ত শব্দার্থিক বিধিনিষেধ রাখতে চায় না:

....

এটি তখনই যখন আমরা অকেজো নামটির সমস্যাটি আবিষ্কার করি। দেখা যাচ্ছে ইসিএমএ স্ক্রিপ্ট 3 এর একটি ছটফট সংরক্ষিত শব্দ নীতি রয়েছে। সংরক্ষিত শব্দগুলির মূল অবস্থানটি উদ্ধৃত করতে হবে, যা সত্যই একটি উপদ্রব। আমি যখন এটি একটি স্ট্যান্ডার্ড হিসাবে রূপায়ণ করতে ঘুরেছিলাম, তখন আমি সংরক্ষণ করা সমস্ত শব্দকে স্ট্যান্ডার্ডে রাখতে চাইনি, কারণ এটি সত্যই বোকা দেখাবে।

এই সময়, আমি লোকদের বোঝানোর চেষ্টা করছিলাম: হ্যাঁ, আপনি জাভাস্ক্রিপ্টে অ্যাপ্লিকেশন লিখতে পারেন, এটি আসলে কাজ করছে এবং এটি একটি ভাল ভাষা। আমি তখন বলতে চাইনি, একই সাথে: এবং তারা যা করেছে তা সত্যিই বোকা জিনিসটি দেখুন! সুতরাং আমি স্থির করেছিলাম, পরিবর্তে, আসুন কেবল কীগুলি উদ্ধৃত করব।
এইভাবে, এটি কতটা খারাপ তা সম্পর্কে আমাদের কাউকে বলার দরকার নেই।

এ কারণেই, আজ পর্যন্ত, কীগুলি জেএসএনে উদ্ধৃত হয়েছে।

...

ECMAScript 5 ম সংস্করণ স্ট্যান্ডার্ড এটিকে ঠিক করে, এখন ES5 বাস্তবায়নে, এমনকি সংরক্ষিত শব্দ দুটি উদ্ধৃতি ছাড়াই ব্যবহার করা যেতে পারে, অবজেক্ট আক্ষরিক এবং সদস্য অ্যাক্সেস ( obj.functionES5 এ ঠিক আছে)।

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


4
@ মার্ক, আপনাকে স্বাগতম। মনে রাখবেন যে জেএসএন হ'ল একটি ভাষা-অজ্ঞাস্তিক ডেটা ইন্টারচেঞ্জ ফর্ম্যাট, এমনকি যদি এর সিনট্যাক্সটি জাভাস্ক্রিপ্ট অবজেক্ট লিটারাল সিনট্যাক্স দ্বারা অনুপ্রাণিত হয়েছিল, তবে তাদের মধ্যে পার্থক্য রয়েছে (কেবল উদ্ধৃত কীগুলির চেয়ে অনেক বেশি)।
খ্রিস্টান সি সালভাদে

4
@ সিএমএস, সুতরাং কেন এটি কেবল ডাবল কোট হতে হবে? কেন সিএস কোটগুলি জেএসএন-তে অবৈধ?
পেসারিয়ার

4
JSON স্ট্যান্ডার্ডটি যথাসম্ভব সহজ রাখতে একক উক্তিগুলি অনুমোদিত নয়। জেএসএনকে কেবল জাভাস্ক্রিপ্টের একটি উপসেট হতে হবে, এটি যতটা সম্ভব জাভাস্ক্রিপ্ট প্রয়োগ করার দরকার নেই।
থোমাসর্টটার

JSON5 বৈশিষ্ট সুপারসেট ES5 সিনট্যাক্স মেনে চলে এবং এইভাবে অন্যান্য বিষয়ের মধ্যে unquoted কী সমর্থন করে। লাইব্রেরিতে সামঞ্জস্যপূর্ণ parseএবং stringifyপদ্ধতি রয়েছে।
আইনিগো

সেই সামঞ্জস্যতার টেবিল লিঙ্কে (উত্তরের নীচে) সংরক্ষিত শব্দের এন্ট্রি অবজেক্ট / অ্যারে আক্ষরিক এক্সটেনশান বিভাগের অধীনে। এবং টিএল; ডিআর, সমস্ত তালিকাভুক্ত ব্রাউজার (আপনারা শুনেছেন এবং আরও প্রায় 20 টি) সবাই "হ্যাঁ" বলে say
i336_

17

হ্যাঁ, এটি অবৈধ জেএসওএন এবং অন্যথায় প্রত্যাখাত হবে অন্যথায়, উদাহরণস্বরূপ jQuery 1.4+ এর একটি চেক রয়েছে যা উদ্ধৃত JSON নীরবে ব্যর্থ করে দেয়। কেন হবে নামেনে চলবে ?

এর আরেকটি উদাহরণ নেওয়া যাক:

{ myKey: "value" }
{ my-Key: "value" }
{ my-Key[]: "value" }

... এগুলি সমস্তই মূল্যের সাথে বৈধ হবে , কেন সামঞ্জস্য বজায় রাখবেন না এবং সমস্ত ক্ষেত্রে এগুলি ব্যবহার করুন, সমস্যার সম্ভাবনা দূর করে?

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

এছাড়াও @ ম্যাথু নীচের মন্তব্যে সবার সেরা পয়েন্ট তৈরি করে, এটি ইতিমধ্যে ব্যর্থ হয়েছে, অব্যক্ত কীগুলি JSON.parse()সমস্ত বড় ব্রাউজারগুলিতে (এবং এটির যথাযথ প্রয়োগকারী অন্য যে কোনও) সহ একটি সিনট্যাক্স ত্রুটি ফেলে দেবে , আপনি এটি এখানে পরীক্ষা করতে পারেন


হ্যাঁ, আমার কিছু পুরানো এজাক্স অ্যাপ্লিকেশন ছিল স্কনকি জসন সার্ভার-সাইড তৈরি করে, যা মূল নামগুলির ডাবল কোটের অভাবের কারণে jquery 1.4 এ আপগ্রেড হওয়ার সময় ব্যর্থ হয়েছিল।
জাল

আপনি যুক্ত করতে চাইবেন যে সমস্ত প্রধান ব্রাউজারগুলিও JSON.parseএটি সঠিকভাবে প্রত্যাখ্যান করবে।
ম্যাথু ফ্ল্যাশেন

আমি কৌতূহলী, কোন ক্ষেত্রে জিকুয়ারি 1.4 নিঃশব্দে এই ধরণের অবৈধ জসন নিয়ে ব্যর্থ হবে?
মার্ক রজার্স

4
@ মার্ক - যে কোনও ক্ষেত্রে এটির যথাযথ উদ্ধৃতি দেওয়া হয়নি বা এতে অবৈধ অক্ষর রয়েছে ... মূলত এটি কোনও অবৈধ জেএসএন দিয়ে ব্যর্থ হবে।
নিক Craver

এটি আকর্ষণীয়, জিকুয়েরি 1.4 এর সাথে আমার অভিজ্ঞতা হয়নি। তদ্ব্যতীত, আমি মনে করি না jquery জাসন বস্তু তৈরির জন্য দায়ী, ব্রাউজারের জাভাস্ক্রিপ্ট দোভাষী যা করেন না তা কি? আপনি Jquery json deserialization উল্লেখ করা হয়?
মার্ক রজার্স

-4

ওয়াইএএমএল, যা প্রকৃতপক্ষে জেএসওনের সুপারস্টার, আপনি যা করতে চান তা সমর্থন করে। যদিও এটি একটি সুপারস্টার, এটি আপনাকে এটি আপনার পছন্দ মতো সহজ রাখতে দেয়।

YAML টাটকা বাতাসের শ্বাস এবং এটি একবার দেখার জন্য এটি আপনার সময়ের পক্ষে উপযুক্ত। শুরু করার জন্য সেরা স্থানটি এখানে: http://en.wikedia.org/wiki/YAML

জেএস সহ সূর্যের নীচে প্রতিটি ভাষার জন্য লিবস রয়েছে, যেমন https://github.com/nodeca/js-yaml


11
ওয়াইএএমএল জেএসএনের সুপারস্টেট নয়।
জন গিব 18

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.