JSON কীগুলি কী চারপাশে কোট দ্বারা বদ্ধ হতে হবে?


233

উদাহরণ: নীচের কোডটি কি জেএসএন স্পেকের বিরুদ্ধে বৈধ ?

{
    precision: "zip"
}

বা আমি কি সর্বদা নিম্নলিখিত সিনট্যাক্স ব্যবহার করব? (এবং যদি তাই হয় তবে কেন?)

{
    "precision": "zip"
}

আমি জেএসএন স্পেসিফিকেশনে এ সম্পর্কে সত্যই কিছু খুঁজে পাইনি। যদিও তারা তাদের উদাহরণগুলির মধ্যে কীগুলির চারপাশে উদ্ধৃতি ব্যবহার করে।

উত্তর:


145

হ্যাঁ, আপনার উদ্ধৃতি চিহ্নের দরকার। এটা সহজ করার জন্য এবং, জাভাস্ক্রিপ্ট সংরক্ষিত কীওয়ার্ড জন্য অন্য পালাবার পদ্ধতি আছে অর্থাত থাকার এড়াতে হয় {for:"foo"}


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

12
আসল কারণ - - এই উত্তর খুব পরীক্ষা stackoverflow.com/questions/4201441/...
TechMaze

3
টিএল; ডঃ: তারা কী হিসাবে ECMAScript সীমাবদ্ধতার (অব্যক্ত) সংরক্ষিত কীওয়ার্ডগুলির সাথে কী হিসাবে কাজ করতে চান না, তাই তাদের কেবল সমস্ত কীগুলি উদ্ধৃত করার প্রয়োজন।
বলপয়েন্টবেন

136

আপনি কী হিসাবে স্ট্রিং ব্যবহার করা সঠিক। আরএফসি 4627-র একটি অংশ এখানে দেওয়া হয়েছে - জাভাস্ক্রিপ্ট অবজেক্ট নোটেশন (জেএসএন) এর জন্য অ্যাপ্লিকেশন / জসন মিডিয়া টাইপ

2.2। অবজেক্টস

কোনও বস্তুর কাঠামো শূন্য বা আরও বেশি নাম / মান জোড় (বা সদস্য) এর চারপাশে কোঁকড়ানো বন্ধনীগুলির এক জোড়া হিসাবে উপস্থাপিত হয়। একটি নাম একটি স্ট্রিং । মান থেকে নামটি পৃথক করে প্রতিটি নামের পরে একটি একক কোলন আসে। একটি একক কমা নিম্নলিখিত মান থেকে একটি মান পৃথক করে। একটি অবজেক্টের মধ্যে নামগুলি অনন্য হওয়া উচিত।

object = begin-object [ member *( value-separator member ) ] end-object

member = string name-separator value

[...]

2.5। স্ট্রিংস

স্ট্রিংগুলির প্রতিনিধিত্ব প্রোগ্রামিং ভাষার সি পরিবারে ব্যবহৃত সম্মেলনের অনুরূপ to একটি স্ট্রিং উদ্ধৃতি চিহ্ন দিয়ে শুরু হয় এবং শেষ হয়। [...]

string = quotation-mark *char quotation-mark

quotation-mark = %x22 ; "

পুরো আরএফসি এখানে পড়ুন ।


11
এবং চিন্তার শেষ করতে, বিভাগ 2.5 বলেছেন: A string begins and ends with quotation marks.
রাকলাইস

13

২.২ থেকে অবজেক্টস

কোনও বস্তুর কাঠামো শূন্য বা আরও বেশি নাম / মান জোড় (বা সদস্য) এর চারপাশে কোঁকড়ানো বন্ধনীগুলির এক জোড়া হিসাবে উপস্থাপিত হয়। একটি নাম একটি স্ট্রিং।

এবং 2.5 থেকে । স্ট্রিংস

একটি স্ট্রিং উদ্ধৃতি চিহ্ন দিয়ে শুরু হয় এবং শেষ হয়।

সুতরাং আমি বলতে পারি যে মান অনুযায়ী: হ্যাঁ, আপনার সর্বদা কীটি উদ্ধৃত করা উচিত (যদিও কিছু পার্সার আরও ক্ষমাশীল হতে পারে)


7

হ্যাঁ, উদ্ধৃতিগুলি বাধ্যতামূলক। http://json.org/ বলেছেন:

string
    ""
    " chars "

0

হ্যাঁ তারা করে. তবে অন্যথায় আপনার প্রয়োজন হলে JSON5 চেকআউট করুন

জেএসএন 5 হ'ল জেএসএনের সুপারস্টার যা ES5 সিনট্যাক্সকে মঞ্জুরি দেয়, সহ:

  • উদ্ধৃত সম্পত্তি কী
  • একক-উদ্ধৃত, পালানো এবং মাল্টি-লাইন স্ট্রিং
  • বিকল্প সংখ্যা বিন্যাস
  • মন্তব্য
  • অতিরিক্ত সাদা জায়গা

JSON5 রেফারেন্স বাস্তবায়ন ( json5npm প্যাকেজ ) একটি উপলব্ধ JSON5বস্তু রয়েছে parseএবং stringifyএকই args এবং বিল্ট-ইন হিসেবে শব্দার্থবিদ্যা সঙ্গে পদ্ধতি JSONঅবজেক্ট।


-2

যেহেতু আপনি "প্যারেন্ট.চাইল্ড" ডটেড স্বরলিপি রাখতে পারেন এবং আপনাকে পিতা বা মাতা ["শিশু"] রাখতে হবে না যা বৈধ এবং দরকারী, তাই আমি বলব যে দুটি উপায় প্রযুক্তিগতভাবে গ্রহণযোগ্য। পার্সার্স উভয়ের উভয় উপায়ে ঠিকঠাক করা উচিত। যদি আপনার পার্সারের কীগুলিতে উদ্ধৃতিগুলির প্রয়োজন না হয় তবে সম্ভবত সেগুলি না রাখাই ভাল (স্থান সংরক্ষণ করে)। এগুলি তাদের স্ট্রিংগুলি বলার জন্য অর্থবোধ করে কারণ এটি হ'ল এবং বর্গাকার বন্ধনীগুলি আপনাকে কীগুলির জন্য মূল্যের মানগুলি ব্যবহার করার ক্ষমতা দেয় যা এটি সঠিকভাবে বোঝায় না। জসনে আপনি রাখতে পারেন ...

>var keyName = "someKey";
>var obj = {[keyName]:"someValue"};

>obj
Object {someKey: "someValue"}

ইস্যু ছাড়াই ঠিক আছে, যদি আপনার কীটির কোনও মান প্রয়োজন হয় এবং উদ্ধৃত কোনটিই কাজ করে না, সুতরাং এটি না করলে আপনি পারবেন না, সুতরাং আপনার "কীগুলিতে উদ্ধৃতি প্রয়োজন হবে না" তাই করবেন না। এমনকি এগুলি সঠিকভাবে বলা হলেও তারা প্রযুক্তিগতভাবে স্ট্রিং। যুক্তি এবং ব্যবহার অন্যথায় তর্ক। বা আনুষ্ঠানিকভাবে এটি অবজেক্টটি some "কিছুকে": আউটপুট দেয় না: "কিছু ভ্যালু" our আমাদের উদাহরণ হিসাবে কোনও ব্রাউজারের কনসোল থেকে চালিত হয়।


2
গৃহীত উত্তর এবং আরএফসি উভয়ই জেএসওএনকে সংজ্ঞায়িত করে যে উদ্ধৃতি আবশ্যক।
কিথ থম্পসন

এটি সত্য, তবে এটি যৌক্তিকভাবে দেখার দরকার নেই। আমি মনে করি যে সমস্ত ব্রাউজার কনসোল থেকে একটি জাভাস্ক্রিপ্ট অবজেক্ট নোটেশন আউটপুটটি ভুল, এবং আমাদের কাউকে এটি ঠিক করতে বলা উচিত। কোনও সামগ্রীর জন্য ব্রাউজার কনসোল আউটপুট যা জেএসওন নয়, তাই জেসসন সম্ভবত অনুমিত হিসাবে সংজ্ঞায়িত করেছেন যে বেশিরভাগ জায়গায় সেভাবে প্রয়োগ করা হয় না বা প্রয়োগ করা হয় না। যাইহোক আমি কেবল মামলাটি তৈরি করতে চেয়েছিলাম, এটি ঘটনাটিকে অন্য আলোকে দেখায়। সত্যিই সম্ভবত তখন অনুমানটি পরিবর্তন করা উচিত, ব্যক্তিগতভাবে ব্যক্তিগতভাবে আমার কাছে গুরুত্বপূর্ণ এমন "উদ্ধৃত কীগুলি" কোথাও প্রয়োজন হয় না। (এটি
মাস্টার জেমস

2
আপনি তিনটি আলাদা জিনিস মিশ্রণ করছেন: জেএসএন, জাভাস্ক্রিপ্ট অবজেক্ট ল্যাটারালস এবং ব্রাউজার বিকাশকারী সরঞ্জামগুলি কনসোল আউটপুট। আপনি যখন objকনসোলে আপনার টাইপ করেন, ব্রাউজারটি বস্তুর কিছু মানব-পঠনযোগ্য উপস্থাপনা প্রদর্শন করে। এটি এটি কোনও বস্তু আক্ষরিক হিসাবে প্রদর্শন করতে পারে (যেমন এটি আপনার উদাহরণে হয়েছিল), বা এটি অন্য কিছু উপস্থাপনা এমনকি একটি ইন্টারেক্টিভও ব্যবহার করতে পারে। জাভা স্ক্রিপ্ট অবজেক্ট লিটারালগুলির কোনও কী নামের আশেপাশে উদ্ধৃতি প্রয়োজন হয় না যদি কীটি কোনও বৈধ সনাক্তকারী এবং কোনও সংরক্ষিত শব্দ নয়। তবে, জেএসএন সর্বদা মূল নামের কাছাকাছি উদ্ধৃতি প্রয়োজন।
মাইকেল জেরি

3
আরও উদাহরণ হিসাবে objকনসোলে টাইপ না করে চেষ্টা করুন JSON.stringify(obj)। এখন আপনি অবজেক্টের একটি বৈধ JSON উপস্থাপনা দেখতে পাবেন, উদ্ধৃত কী নামের সাথে সম্পূর্ণ। বিপরীতে, একটি স্ট্রিং বৈধ JSON আছে কিনা তা দেখতে চেষ্টা করুন JSON.parse(string)। কীগুলি উদ্ধৃত না হলে এটি একটি ব্যতিক্রম ছুঁড়ে দেবে। উদাহরণস্বরূপ, JSON.parse('{"a":"b"}')সফল হবে, তবে JSON.parse('{a:"b"}')ব্যর্থ হবে।
মাইকেল গ্যারি

1
ওতো, আপনার ব্যবহার var obj = {[keyName]:"someValue"};খুব আকর্ষণীয়! আমি জানতাম না আপনি জাভাস্ক্রিপ্ট অবজেক্ট আক্ষরিক ক্ষেত্রে এটি করতে পারেন। কিছুটা চেক দেখায় যে এটি ES6 এ নতুন কিছু you আপনি এটি ES5 এ করতে পারেন নি।
মাইকেল গ্যারি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.