JSON এবং অবজেক্ট লিটারাল নোটেশনের মধ্যে পার্থক্য কী?


219

কেউ আমাকে বলতে পারবেন যে জাভাস্ক্রিপ্ট অবজেক্টের মধ্যে অবজেক্ট লিটারাল নোটেশন এবং জেএসএন অবজেক্ট ব্যবহার করে সংজ্ঞা দেওয়া হয়েছে তার মধ্যে প্রধান পার্থক্য কী?

একটি জাভাস্ক্রিপ্ট বই অনুসারে এটি বলে যে এটি একটি অবজেক্ট নোটেশন ব্যবহার করে সংজ্ঞাযুক্ত :

var anObject = {
    property1 : true,
    showMessage : function (msg) { alert(msg) }
};

এই ক্ষেত্রে এটি কেন কোনও জেএসএন বস্তু নয়? কোটেশন চিহ্ন ব্যবহার করে এটি সংজ্ঞায়িত হয়নি কেবল?


20
"এটি কেন এই ক্ষেত্রে JSON অবজেক্ট নয়?": কারণ আপনার কীগুলি অবশ্যই স্ট্রিং হওয়া উচিত এবং কোনও ফাংশনটি বৈধ JSON মান নয়।
ম্যাট

উত্তর:


247

জেএসওএন আসলে কী তা প্রথমে পরিষ্কার করা যাক । জেএসএন হ'ল একটি পাঠ্য , ভাষা-স্বাধীন ডেটা-এক্সচেঞ্জ ফর্ম্যাট, অনেকটা এক্সএমএল, সিএসভি বা ওয়াইএএমএল এর মতো।

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

এ জাতীয় ফর্ম্যাটগুলি সাধারণত ভাষা-স্বতন্ত্র, যার অর্থ তারা জাভা, পাইথন, জাভাস্ক্রিপ্ট, পিএইচপি দ্বারা প্রক্রিয়া করা যেতে পারে, আপনি নাম দিন।

বিপরীতে, জাভাস্ক্রিপ্ট একটি প্রোগ্রামিং ভাষা। অবশ্যই জাভাস্ক্রিপ্ট ডেটা সংজ্ঞায়িত / বর্ণনা করার একটি উপায়ও সরবরাহ করে তবে সিনট্যাক্সটি জাভাস্ক্রিপ্টের জন্য খুব নির্দিষ্ট।

একটি পাল্টা উদাহরণ হিসাবে, পাইথন ধারণা হয়েছে tuples , তাদের সিনট্যাক্স হয় (x, y)। জাভাস্ক্রিপ্ট এর মত কিছু নেই।


আসুন JSON এবং জাভাস্ক্রিপ্ট অবজেক্ট আক্ষরিক মধ্যে সিনট্যাক্টিকাল পার্থক্য তাকান।

জেএসএনের নিম্নলিখিত বাক্য গঠনমূলক বাধা রয়েছে:

  • অবজেক্ট কীগুলি অবশ্যই স্ট্রিং হতে হবে (অর্থাত্ ডাবল উদ্ধৃতিতে একটি অক্ষর ক্রম ")।
  • মানগুলি হ'ল:
    • একটি স্ট্রিং
    • একটি সংখ্যা
    • an (JSON) অবজেক্ট
    • একটি অ্যারের
    • true
    • false
    • null
  • সদৃশ কী ( {"foo":"bar","foo":"baz"}) নির্ধারিত, প্রয়োগ-নির্দিষ্ট ফলাফল উত্পাদন করে; জেএসএন স্পেসিফিকেশন বিশেষত তাদের শব্দার্থবিজ্ঞানের সংজ্ঞা দেয় না

জাভাস্ক্রিপ্টে, অবজেক্ট লিটারেল থাকতে পারে

  • স্ট্রিং লিটারেল, সংখ্যা লিটারেল বা শনাক্তকরণের নাম হিসাবে কী (ES6 যেহেতু, কীগুলি এখন গণনা করা যেতে পারে, যা আরও একটি সিনট্যাক্স প্রবর্তন করে)।
  • মানগুলি ফাংশন সংজ্ঞা এবং সহ কোনও বৈধ জাভাস্ক্রিপ্ট এক্সপ্রেশন হতে পারে undefined
  • সদৃশ কীগুলি সংজ্ঞায়িত, নির্দিষ্ট ফলাফল উত্পন্ন করে (আলগা মোডে, পরবর্তী সংজ্ঞাটি পূর্বের স্থান করে দেয়; কঠোর মোডে, এটি একটি ত্রুটি)।

এটি জেনে শুধুমাত্র সিন্টেক্সটি দেখে আপনার উদাহরণটি দুটি কারণে জেএসএন নয়:

  1. আপনার কীগুলি স্ট্রিং নয় (আক্ষরিক)। তারা সনাক্তকারী নাম
  2. "JSON অবজেক্ট" এর মান হিসাবে আপনি কোনও ফাংশন বরাদ্দ করতে পারবেন না (কারণ JSON ফাংশনগুলির জন্য কোনও সিনট্যাক্স সংজ্ঞায়িত করে না)।

তবে সবচেয়ে গুরুত্বপূর্ণ, প্রথম থেকেই আমার ব্যাখ্যাটির পুনরাবৃত্তি করতে: আপনি একটি জাভাস্ক্রিপ্ট প্রসঙ্গে আছেন। আপনি একটি জাভাস্ক্রিপ্ট অবজেক্টের সংজ্ঞা দিন। যদি কোনও হয় তবে একটি "JSON অবজেক্ট" কেবল একটি স্ট্রিংয়ে থাকতে পারে:

 var obj = {foo: 42}; // creates a JavaScript object (this is *not* JSON)
 var json = '{"foo": 452}'; // creates a string containing JSON

এটি হ'ল যদি আপনি জাভাস্ক্রিপ্ট উত্স কোডটি লিখছেন, এবং কোনও স্ট্রিংয়ের সাথে ডিল করছেন না, আপনি জেএসওনের সাথে কাজ করছেন না। হতে পারে আপনি JSON হিসাবে ডেটা পেয়েছেন (উদাহরণস্বরূপ, এজ্যাক্সের মাধ্যমে বা কোনও ফাইল থেকে পড়ার মাধ্যমে), কিন্তু আপনি বা যে লাইব্রেরিটি আপনি ব্যবহার করছেন সেটি পার্স করে দিলে, এটি আর জেএসএন নয়।


কেবলমাত্র বস্তুর আক্ষরিক এবং জেএসওন দেখতে দেখতে একই রকম , এর অর্থ এই নয় যে আপনি তাদের নাম পরিবর্তন করতে পারবেন। এছাড়াও দেখুন "জেএসএন অবজেক্ট" এর মতো কোনও জিনিস নেই


8
আরও খেয়াল করুন যে জেএসএন হ'ল অবজেক্ট লিটারাল নোটেশনের একটি উপসেট
শান কিনসেই

14
@SeanKinsey: ছাড়া তা না হয় যে: timelessrepo.com/json-isnt-a-javascript-subset
mpen

1
লক্ষ থাকে যা সাধারণত আপনি একটি প্রসঙ্গ যেখানে মন্তব্য আইনগত হয় একটি জাভাস্ক্রিপ্ট অবজেক্ট আক্ষরিক আশা করতে চাই মূল্য হতে পারে, এবং JSON বৈশিষ্ট (দেখুন মন্তব্যের জন্য অনুমতি দেয় না এই পোস্টে
ব্রায়ান হেনরি

আপনি "" ব্যবহার না করেও অবজেক্টের আক্ষরিক কীগুলি সর্বদা স্ট্রিং থাকে।
ওভাররেঞ্জচেঞ্জ

2
@ সার্বভৌম পরিবর্তন: "বস্তুর আক্ষরিক কীগুলি সর্বদা স্ট্রিং থাকে" আপনি এখানে দুটি জিনিস মিশ্রিত করছেন, তবে আমি আপনাকে দোষ দিতে পারি না কারণ আমিও এখানে একটি পরিষ্কার লাইন আঁকিনি। আপনাকে একটি অবজেক্ট আক্ষরিক এবং একটি বস্তুর মানের মধ্যে পার্থক্য করতে হবে । একটি আক্ষরিক হ'ল আপনি উত্স কোডে যে অক্ষর ক্রমটি লিখেছেন তা। মান কি সোর্স কোড ব্যাখ্যা দ্বারা নির্মিত হচ্ছে। অবজেক্ট ল্যাটারাল (সিনট্যাক্স) আপনাকে শনাক্তকরণকারীর নাম , স্ট্রিং ল্যাটারাল বা সংখ্যা লিটারাল ব্যবহার করতে দেয় । আপনি সঠিক যে রানটাইম সময়ে, সেগুলি সমস্ত স্ট্রিংয়ে রূপান্তরিত হয় (তবে আমাদের পাশাপাশি এখন চিহ্ন রয়েছে)।
ফেলিক্স ক্লিং

41

JSON এর সহ আরও অনেক সীমিত বাক্য গঠন রয়েছে:

  • মূল মান অবশ্যই উদ্ধৃত করা উচিত
  • স্ট্রিংগুলি অবশ্যই উদ্ধৃত করা উচিত "এবং না'
  • আপনার মানগুলির একটি সীমিত পরিসীমা রয়েছে (যেমন কোনও কার্যের অনুমতি নেই)

1
এই "কোন ফাংশন অনুমোদিত নয়" পছন্দ করেছেন।
করণ কা

মন্তব্যগুলিও অনুমোদিত নয়। প্রশ্নবিদ্ধ কারণে (শুনেছি তাদের কয়েকবার জিজ্ঞাসাবাদ করা হয়েছে।) আমি বলছি এই মূল পার্থক্য
ব্যবহারকারী 7610

15

"জেএসওএন অবজেক্ট" বলে আসলে কিছুই নেই।

জেএসএন স্পেকটি স্ট্রিং হিসাবে ডেটা এনকোডিংয়ের একটি বাক্য গঠন। লোকেরা যাকে "জেএসএন অবজেক্ট" বলে (জাভাস্ক্রিপ্টে) এটি সত্যই কেবল একটি সাধারণ জাভাস্ক্রিপ্ট অবজেক্ট যা বৈধ জেএসওএন স্ট্রিং থেকে ডি-সিরিয়াল করা হয়েছে এবং সহজেই একটি বৈধ জেএসএন স্ট্রিং হিসাবে পুনরায় সিরিয়ালায়িত হতে পারে। এর সাধারণ অর্থ এটি কেবলমাত্র ডেটা (এবং ফাংশন নয়) ধারণ করে। এর অর্থ হ'ল কোনও তারিখ নেই, কারণ জেএসএনের কোনও তারিখের प्रकार নেই (সম্ভবত জেএসএন সম্পর্কিত সবচেয়ে বেদনাদায়ক জিনিস;)

তদ্ব্যতীত, (সাইড-রেন্ট ...) লোকেরা যখন "জেএসওএন অবজেক্ট" সম্পর্কে কথা বলে তখন তাদের প্রায়শই এমন ডেটা বোঝানো হয় যা শীর্ষ স্তরে "কোঁকড়ানো-ধনুর্বন্ধনী" রয়েছে। এটি একটি জাভাস্ক্রিপ্ট অবজেক্টের সাথে সুন্দরভাবে মিলছে। তবে, জেএসওএন স্পেকের প্রয়োজন নেই যে জেএসওএন স্ট্রিংয়ের শীর্ষ স্তরে একটি একক "কোঁকড়ানো-ধনুর্বন্ধনী" অবজেক্ট থাকা উচিত। শীর্ষ স্তরে একটি তালিকা থাকা, এমনকি একটি মাত্র মান থাকা এমনকি জেএসওনের পক্ষে একেবারে বৈধ। সুতরাং, প্রতিটি "JSON অবজেক্ট" বৈধ JSON এর সাথে মিল রাখে, সমস্ত বৈধ JSON স্ট্রিং আমরা "JSON অবজেক্ট" বলব তার সাথে মিলে না! (কারণ স্ট্রিংটি কোনও তালিকা বা পারমাণবিক মান উপস্থাপন করতে পারে)


5
আপনার উত্তরে একটি ত্রুটি রয়েছে: শীর্ষ স্তরে পারমাণবিক মান থাকা অবৈধ জেএসওএন। জেএসএন শীর্ষটিকে কোনও অবজেক্ট বা অ্যারে হতে দেয় তবে অন্য কিছু নয়। আরএফসি 4627 , মান, JSON এর ব্যাকরণ হিসাবে বর্ণনা করে JSON-text = object / array
ররি ও'কেনে

9

জাভাস্ক্রিপ্টে জেএসএন অনুসারে ,

জেএসএন হ'ল জাভাস্ক্রিপ্টের অবজেক্ট আক্ষরিক স্বরলিপিটির একটি উপসেট

অন্য কথায়, বৈধ জেএসওএন হ'ল বৈধ জাভাস্ক্রিপ্ট অবজেক্ট আক্ষরিক স্বরলিপি তবে এটি অন্যভাবে নয়।

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


2
কেবল লক্ষ্য করার জন্য: এটি কোনও সঠিক উপসেট নয় , কিছু জেএসএন স্ট্রিং রয়েছে যা জেএস অবজেক্ট
লিটারাল

5

🔫 তাদেরকে JSON : চর্বি মুক্ত বিকল্প এক্সএমএল করতে

JSON জনগণের দ্বারা ব্যাপকভাবে গৃহীত হয়েছে যারা দেখেছেন যে বিতরণকৃত অ্যাপ্লিকেশন এবং পরিষেবা উত্পাদন করা এটি অনেক সহজ করে তুলেছে। JSON এর জন্য অফিশিয়াল ইন্টারনেট মিডিয়া টাইপ application/json RFC 4627। JSON ফাইলের নামগুলি এক্সটেনশনটি ব্যবহার করে .json


► জাভাস্ক্রিপ্ট অবজেক্ট নোটেশন ( JSON) একটি লাইটওয়েট, পাঠ্য-ভিত্তিক, ভাষা-স্বাধীন ডেটা ইন্টারচেঞ্জ ফর্ম্যাট। জেএসওএন কোনও প্রোগ্রামিং ভাষায় রচিত অ্যাপ্লিকেশনগুলির মধ্যে ডেটা বিনিময় করতে ব্যবহৃত হয়।

JSON অবজেক্টটি একটি একক বস্তু যা পার্স এবং স্ট্রিংফাই দুটি ফাংশন যুক্ত করে, যা JSON পাঠ্যগুলি পার্স এবং নির্মাণ করতে ব্যবহৃত হয়।

  • JSON.stringify একটি স্ট্রিং উত্পাদন করে যা নিম্নলিখিত JSON ব্যাকরণের সাথে সামঞ্জস্য রয়েছে।
  • JSON.parse একটি স্ট্রিং গ্রহণ করে যা JSON ব্যাকরণের সাথে সঙ্গতিপূর্ণ।

পার্সজেসন পদ্ধতিটি এর মধ্যে অন্তর্ভুক্ত করা হবে Fourth Edition of ECMAScript। ইতিমধ্যে, একটি জাভাস্ক্রিপ্ট বাস্তবায়ন json.org এ উপলব্ধ।

var objLiteral = {foo: 42}; // JavaScript Object
console.log('Object Literal : ', objLiteral ); // Object {foo: 42}foo: 42__proto__: Object

// This is a JSON String, like what you'd get back from an AJAX request.
var jsonString = '{"foo": 452}';
console.log('JOSN String : ', jsonString ); // {"foo": 452}

// This is how you deserialize that JSON String into an Object.
var serverResposnceObject = JSON.parse( jsonString );
console.log('Converting Ajax response to JavaScript Object : ', serverResposnceObject); // Object {foo: 42}foo: 42 __proto__: Object

// And this is how you serialize an Object into a JSON String.
var serverRequestJSON = JSON.stringify( objLiteral );
console.log('Reqesting server with JSON Data : ', serverRequestJSON); // '{"foo": 452}'

JSON হ'ল জাভাস্ক্রিপ্টের সাবসেট। জাভাস্ক্রিপ্ট ECMAScript প্রোগ্রামিং ভাষা স্ট্যান্ডার্ড থেকে প্রাপ্ত হয়েছিল।


C ECMAScript

ECMAScript বিশ্বের অন্যতম ব্যবহৃত বহুল ব্যবহৃত সাধারণ উদ্দেশ্য প্রোগ্রামিং ভাষা হয়ে উঠেছে। এটি ওয়েব ব্রাউজারগুলিতে এমবেড করা ভাষা হিসাবে বেশি পরিচিত তবে এটি সার্ভার এবং এম্বেড অ্যাপ্লিকেশনগুলির জন্যও ব্যাপকভাবে গৃহীত হয়েছে। এর নাম ECMAScript বিভিন্ন উদ্ভব প্রযুক্তির উপর ভিত্তি করে করা হয়, সবচেয়ে সুপরিচিত হচ্ছে JavaScript(নেটস্কেপ কমিউনিকেশন)) এবং JScript(মাইক্রোসফট কর্পোরেশন)।)যদিও 1994 এর আগে, ইসিএমএ "ইউরোপীয় কম্পিউটার উত্পাদনকারী সংস্থা" নামে পরিচিত ছিল, 1994 সালের পরে, সংগঠনটি বিশ্বব্যাপী পরিণত হওয়ার পরে, "ট্রেডমার্ক" "একমা" historicalতিহাসিক কারণে রাখা হয়েছিল।

ECMAScript হ'ল ভাষা, যেখানে জাভাস্ক্রিপ্ট, জেএসক্রিপ্ট এবং এমনকি অ্যাকশনস্ক্রিপ্ট বলা হয় "Dialects"

উপভাষাগুলি একই ভাষা থেকে প্রাপ্ত হয়েছে। এগুলি একে অপরের সাথে বেশ মিল, কারণ তারা একই ভাষা থেকে উদ্ভূত হয়েছে তবে তাদের কিছু পরিবর্তন হয়েছে। একটি উপভাষা ভাষাতেই একটি ভিন্নতা। এটি একক ভাষা থেকে উদ্ভূত।

  • এসকিউএল ল্যাঙ্গুয়েজ - হাইবারনেট মাইএসকিউএল ডায়ালেক্ট, ওরাকল ডায়ালেক্ট, .. যাতে কিছু পরিবর্তন বা যুক্ত কার্যকারিতা রয়েছে।

আপনার ব্যবহারকারীদের ব্রাউজার এবং কম্পিউটার সম্পর্কে তথ্য।

navigator.appName // "Netscape"

ECMAScript হ'ল স্ক্রিপ্টিং ভাষা যা জাভাস্ক্রিপ্টের ভিত্তি তৈরি করে। JavaScript language resources

ECMA-262 Links
Initial Edition, June 1997 PDF.
2nd Edition, August 1998 PDF.
3rd Edition, December 1999 PDF.
5th Edition, December 2009 PDF.
5.1 Edition, June 2011 HTML.
6th Edition, June 2015 HTML.
7ᵗʰ Edition, June 2016 HTML.
8th edition, June 2017 HTML.
9th Edition, 2018 HTML.

নোট « চতুর্থ সংস্করণ ECMAScript প্রকাশিত হয়নি কারণ কাজটি অসম্পূর্ণ ছিল


জেএসএন কাঠামোগত ডেটার বহনযোগ্য উপস্থাপনের জন্য বিন্যাসের একটি ছোট সেট সংজ্ঞায়িত করে।

  1. ► মূল মানগুলি উদ্ধৃত করতে হবে, কীগুলির জন্য কেবল স্ট্রিংগুলিই অনুমোদিত। আপনি যদি স্ট্রিং ছাড়া অন্য ব্যবহার করেন তবে এটি স্ট্রিংয়ে রূপান্তরিত হবে। তবে স্ট্রিং ছাড়া অন্য কীগুলি ব্যবহার করার পরামর্শ দেওয়া হয়নি। { 'key':'val' }ওভার - এর মতো উদাহরণ পরীক্ষা করুনRFC 4627 - jsonformatter

    var storage = {
      0 : null,
      1 : "Hello"
    };
    console.log( storage[1] ); // Hello
    console.log( JSON.stringify( storage ) ); // {"0":null,"1":"Hello","2":"world!"}
    
    var objLiteral = {'key1':'val1'};
        var arr = [10, 20], arr2 = [ 'Yash', 'Sam' ];
        var obj = { k: 'v' }, obj2 = { k2: 'v2' };
        var fun = function keyFun() {} ;
    
    objLiteral[ arr ] = 'ArrayVal';     objLiteral[ arr2 ] = 'OverridenArrayVal';
    objLiteral[ obj ] = 'ObjectVal';    objLiteral[ obj2 ] = 'OverridenObjectVal';
    objLiteral[ fun ] = 'FunctionVal';
    
    console.log( objLiteral );
    // Object {key1: "val1", 10,20: "ArrayVal", Yash,Sam: "OverridenArrayVal", [object Object]: "OverridenObjectVal", function keyFun() {}: "FunctionVal"}
    console.log( JSON.stringify( objLiteral ) );
    // {"key1":"val1","10,20":"ArrayVal","Yash,Sam":"OverridenArrayVal","[object Object]":"OverridenObjectVal","function keyFun() {}":"FunctionVal"}
    console.log( JSON.parse( JSON.stringify( objLiteral ) ) );
    // Object {key1: "val1", 10,20: "ArrayVal", Yash,Sam: "OverridenArrayVal", [object Object]: "OverridenObjectVal", function keyFun() {}: "FunctionVal"}
    
    console.log('Accessing Array  Val : ', objLiteral[ [10,20] ] );
    console.log('Accessing Object Val : ', objLiteral[ '[object Object]' ] );
    console.log('Accessing Function Val : ', objLiteral[ 'function keyFun() {}' ] );
  2. ► জেএসএন স্ট্রিংগুলি অবশ্যই "এবং না" দিয়ে উদ্ধৃত করা উচিত A একটি স্ট্রিং অনেকটা সি বা জাভা স্ট্রিংয়ের মতো St স্ট্রিংগুলি ডাবল কোটে মুড়ে দেওয়া উচিত।

    • অক্ষরগুলি স্থির মান হয়, ভেরিয়েবল নয়, যা আপনি আক্ষরিকভাবে আপনার স্ক্রিপ্টে সরবরাহ করেন।
    • একটি স্ট্রিং শূন্য বা আরও বেশি অক্ষরের একটি ক্রম যা ব্যাকস্ল্যাশ অব্যাহতি সহ উদ্ধৃতিগুলিতে আবৃত থাকে, বেশিরভাগ প্রোগ্রামিং ভাষায় একই স্বরলিপি ব্যবহৃত হয়।
      • । - স্ট্রিংয়ে বিশেষ প্রতীকগুলি অনুমোদিত তবে ব্যবহারে ফিরে আসেনি।
      • \ "- বিশেষ অক্ষরগুলি এড়ানো যায় But তবে পালানোর জন্য পুনরায় সাজানো হয়নি (') একক উদ্ধৃতি St কড়া মোডে এটি নিক্ষেপ করবে এবং ত্রুটি হবে - SyntaxError: Unexpected token ' in JSON

    { "Hai\" \n Team 🔫":5, "Bye \'": 7 }অনলাইনে জেএসএন সম্পাদনাগুলির মাধ্যমে এই কোডটি পরীক্ষা করুন ।ModesnotStrict,Strinct.

    var jsonString = "{'foo': 452}"; // {'foo': 452}
    var jsonStr = '{"foo": 452}'; // {"foo": 452}
    
    JSON.parse( jsonString ); // Unexpected token ' in JSON at position 1(…)
    JSON.parse( jsonStr ); // Object {foo: 452}
    
    objLiteral['key'] = 'val'; // Object {foo: 42, key: "val"}
    objLiteral.key2 = 'val';
    
    // objLiteral.key\n3 - SyntaxError: Invalid or unexpected token
    objLiteral['key\n3'] = 'val'; // Object {"foo": "42", key: "val", key2: "val", "key↵3": "val"}
    
    JSON.stringify( objLiteral ); // {"foo":"42","key":"val","key2":"val","key\n3":"val"}

অবজেক্ট প্রোপার্টি অ্যাক্সেসররা ডট স্বরলিপি বা বন্ধনী স্বরলিপি ব্যবহার করে কোনও সামগ্রীর বৈশিষ্ট্যে অ্যাক্সেস সরবরাহ করে।

  1. ► আপনার মানগুলির একটি আরও সীমিত পরিসীমা রয়েছে (যেমন কোনও ফাংশন অনুমোদিত নয়)। একটি মান ডাবল উদ্ধৃতি, সংখ্যা, বুলিয়ান, নাল, বস্তু বা অ্যারেতে স্ট্রিং হতে পারে। এই কাঠামো নেস্ট করা যেতে পারে।

    var objLiteral = {};
    objLiteral.funKey = function sayHello() {
        console.log('Object Key with function as value - Its outcome message.');
    };
    
    objLiteral['Key'] = 'Val';
    
    console.log('Object Literal Fun : ', objLiteral );
    // Object Literal Fun :  Object {Key: "Val"}Key: "Val"funKey: sayHello()__proto__: Object
    console.log( JSON.stringify( objLiteral ) ); // {"Key":"Val"}

এখানে চিত্র বর্ণনা লিখুন


JavaScriptহ'ল ইসমাস্ক্রিপ্ট স্ট্যান্ডার্ডের সর্বাধিক জনপ্রিয় বাস্তবায়ন। জাভাস্ক্রিপ্টের মূল বৈশিষ্ট্যগুলি ECMAScript স্ট্যান্ডার্ডের উপর ভিত্তি করে, তবে জাভাস্ক্রিপ্টে অন্যান্য অতিরিক্ত বৈশিষ্ট্যও রয়েছে যা ইসিএমএ স্পেসিফিকেশন / স্ট্যান্ডার্ডে নেই। প্রতিটি ব্রাউজারে একটি জাভাস্ক্রিপ্ট ইন্টারপ্রেটার থাকে।

জাভাস্ক্রিপ্ট একটি গতিময় টাইপ করা ভাষা। এর অর্থ আপনি যখন কোনও ভেরিয়েবলের ডেটা টাইপ ঘোষণা করবেন তখন তা নির্দিষ্ট করতে হবে না এবং স্ক্রিপ্ট সম্পাদনার সময় ডেটা টাইপগুলি স্বয়ংক্রিয়ভাবে রূপান্তরিত হয়।

Literals :

'37' - 7    // 30
'37' + 7    // "377"
+'37' + 7   // 44
+'37'       // 37
'37'        // "37"

parseInt('37');     // 37
parseInt('3.7');    // 3

parseFloat(3.7);    // 3.7

// An alternative method of retrieving a number from a string is with the + (unary plus) operator:
+'3.7'              // 3.7

Object literals RFC 7159

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

ECMAScript প্রোটোটাইপ-ভিত্তিক উত্তরাধিকার সমর্থন করে। প্রতিটি কনস্ট্রাক্টরের সাথে সম্পর্কিত প্রোটোটাইপ থাকে এবং সেই কনস্ট্রাক্টরের তৈরি প্রতিটি বস্তুর প্রোটোটাইপের (যা অবজেক্টের প্রোটোটাইপ নামে পরিচিত) এর কনস্ট্রাক্টরের সাথে সম্পর্কিত একটি অন্তর্নিহিত রেফারেন্স থাকে। তদ্ব্যতীত, একটি প্রোটোটাইপের প্রোটোটাইপের একটি নন-নাল অন্তর্নিহিত রেফারেন্স থাকতে পারে, এবং আরও; একে প্রোটোটাইপ চেইন বলে called

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

একটি প্রোটোটাইপ হ'ল একটি বস্তু যা কাঠামো, রাষ্ট্র এবং আচরণের উত্তরাধিকার ECMAScript এ প্রয়োগ করতে ব্যবহৃত হয়। যখন কোনও কনস্ট্রাক্টর কোনও বস্তু তৈরি করে, তখন সেই বস্তু সম্পত্তির রেফারেন্সগুলি সমাধান করার উদ্দেশ্যে নির্মাতার সাথে সম্পর্কিত প্রোটোটাইপটি স্পষ্টভাবে উল্লেখ করে। কনস্ট্রাক্টরের সাথে সম্পর্কিত প্রোটোটাইপ প্রোগ্রাম এক্সপ্রেশন কনস্ট্রাক্টর.প্রোটোটাইপ দ্বারা উল্লেখ করা যেতে পারে, এবং কোনও বস্তুর প্রোটোটাইপে যুক্ত বৈশিষ্ট্যগুলি ভাগের মাধ্যমে, সমস্ত বস্তু প্রোটোটাইপ ভাগ করে ভাগ করা হয়।


2

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

Https://tools.ietf.org/html/rfc7159 থেকে নিষ্কাশন

  1. জাভাস্ক্রিপ্ট অবজেক্ট নোটেশন (জেএসএন) কাঠামোগত ডেটার সিরিয়ালাইজেশনের জন্য একটি পাঠ্য বিন্যাস। এটি জাভাস্ক্রিপ্টের অবজেক্ট লিটারাল থেকে প্রাপ্ত , যেমন ইসিএমএসক্রিপ্ট প্রোগ্রামিং ল্যাঙ্গুয়েজ স্ট্যান্ডার্ড, তৃতীয় সংস্করণ [ইসিএমএ -২ 26২] তে সংজ্ঞায়িত।
  2. জেএসএন চারটি আদিম ধরণের (স্ট্রিং, সংখ্যা, বুলিয়ান এবং নাল) এবং দুটি কাঠামোগত ধরণের ( অবজেক্ট এবং অ্যারে) প্রতিনিধিত্ব করতে পারে।
  3. একটি অবজেক্ট শূন্য বা আরও বেশি নাম / মান জোড়ের একটি আনর্ডারড সংগ্রহ, যেখানে একটি নাম একটি স্ট্রিং এবং মান একটি স্ট্রিং, সংখ্যা, বুলিয়ান, নাল, বস্তু বা অ্যারে।
  4. সূচনা-অবজেক্ট = ws% x7B ws; {বাম কোঁকড়া বন্ধনী
  5. শেষ-অবজেক্ট = ws% x7D ws; } ডান কোঁকড়ানো বন্ধনী
  6. একটি JSON মান একটি অবজেক্ট , অ্যারে, সংখ্যা, বা স্ট্রিং বা নিম্নলিখিত তিনটি আক্ষরিক নামের একটি হতে হবে: মিথ্যা নাল সত্য
  7. একটি অবজেক্ট স্ট্রাকচার কোঁকড়া বন্ধনীগুলির এক জোড়া হিসাবে উপস্থাপিত হয়
  8. একটি অবজেক্টের মধ্যে নামগুলি অনন্য হওয়া উচিত। অবজেক্ট = আরম্ভ-অবজেক্ট [সদস্য * (মান-বিভাজক সদস্য)] শেষ-অবজেক্ট
  9. একটি বস্তুর যাদের নাম প্রত্যেকেই আলাদা অর্থে যে সব সফটওয়্যার যা গ্রহণ বাস্তবায়নের মধ্যে অন্তর্চালিত হয় বস্তুর নাম-মান ম্যাপিং একমত হবে। যখন একটি মধ্যে নাম বস্তুর অনন্য নয়, সফ্টওয়্যার আচরণ যে এই ধরনের একটি পায় বস্তুর অনির্দেশ্য হয়।
  10. উদাহরণ (আরএফসি এর 12 পৃষ্ঠা থেকে)

    এটি একটি JSON অবজেক্ট:

          {
            "Image": {
                "Width":  800,
                "Height": 600,
                "Title":  "View from 15th Floor",
                "Thumbnail": {
                    "Url":    "http://www.example.com/image/481989943",
                    "Height": 125,
                    "Width":  100
                },
                "Animated" : false,
                "IDs": [116, 943, 234, 38793]
              }
          }

    এর চিত্র সদস্যটি এমন একটি বস্তু যার থাম্বনেইল সদস্য একটি বস্তু এবং যার আইডি সদস্য সংখ্যাগুলির একটি অ্যারে।

"জেএসওএন অবজেক্ট" বলে আসলে কিছুই নেই।

সত্যি?


1
ডেভি, এটি একটি নয় Object, এটি একটি String। ধন্যবাদ
আবু আবু

1

যতদূর আমি বুঝতে পারি মূল পার্থক্য হ'ল নমনীয়তা

জেএসএন হ'ল "জাভাস্ক্রিপ্ট অবজেক্ট নোটেশন" এ এক ধরণের মোড়ক যা ব্যবহারকারীদের অবজেক্টগুলি সংজ্ঞায়িত করার জন্য আরও কঠোর নিয়ম মানতে বাধ্য করে। এবং এটি জাভাস্ক্রিপ্ট অবজেক্ট নোটেশন বৈশিষ্ট্য দ্বারা সরবরাহিত সম্ভাব্য অবজেক্টের ঘোষণার উপায়গুলি সীমাবদ্ধ করে এটি করে।

ফলস্বরূপ আমাদের কাছে একটি সহজ এবং আরও মানসম্পন্ন বস্তু রয়েছে যা প্ল্যাটফর্মগুলির মধ্যে ডেটা-এক্সচেঞ্জের পক্ষে আরও ভাল su

সুতরাং মূলত, উপরে আমার উদাহরণে নতুন অবজেক্টটি জাভাস্ক্রিপ্ট অবজেক্ট নোটেশন ব্যবহার করে সংজ্ঞায়িত একটি অবজেক্ট; তবে এটি কোনও 'বৈধ' JSON অবজেক্ট নয় কারণ এটি JSON মানকগুলির যে নিয়মগুলি প্রয়োজনীয় তা অনুসরণ করে না।

এই লিঙ্কটিও বেশ সহায়ক: http://msdn.microsoft.com/en-us/library/bb299886.aspx


2
জেএসএন এবং অবজেক্ট নোটেশনের ব্রাউজরাউজ সম্পূর্ণ আলাদা: প্রথমটি কেবলমাত্র ডেটা ইন্টারচেঞ্জিংয়ের জন্য ব্যবহৃত হয় এবং দ্বিতীয়টি কেবল অভ্যন্তরীণ ব্যবহারের জন্য জেএস বস্তু তৈরির জন্য ব্যবহৃত হয়। এগুলি একই জিনিসটির কম বেশি কঠোর সংস্করণ নয়।
ilo

0

প্রথমে আপনার জানা উচিত জেএসএন কী:

এটি ভাষা অজ্ঞেয়াদি ডেটা-ইন্টারচেঞ্জ বিন্যাস। জেএসএন এর বাক্য গঠনটি জাভাস্ক্রিপ্ট অবজেক্ট লিটারাল নোটেশন দ্বারা অনুপ্রাণিত হয়েছিল, তবে তাদের মধ্যে পার্থক্য রয়েছে।

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

// জেএসএন: {"ফু": "বার"}

// বস্তুর আক্ষরিক: var o = {foo: "বার"}; উদ্ধৃতিগুলি JSON এ বাধ্যতামূলক কারণ জাভাস্ক্রিপ্টে (আরও সঠিকভাবে ECMAScript 3 য় সংস্করণে), সম্পত্তি হিসাবে নাম হিসাবে সংরক্ষিত শব্দের ব্যবহার নিষিদ্ধ, উদাহরণস্বরূপ:

var o = {if: "foo"}; // ES3- এ সিন্ট্যাক্স এরিয়ার সম্পত্তি সম্পর্কিত নাম হিসাবে (স্ট্র্যাপের নাম উদ্ধৃত করে) স্ট্রিং আক্ষরিক ব্যবহার করা কোনও সমস্যা দেয় না:

var o = {"if": "foo"}; সুতরাং "সামঞ্জস্যযোগ্যতা" (এবং সহজেই সহজে চিহ্নিত করা যায়?) এর জন্য উদ্ধৃতিগুলি বাধ্যতামূলক।

JSON এ থাকা ডাটা টাইপগুলিও নিম্নলিখিত মানগুলিতে সীমাবদ্ধ:

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

// অবৈধ জেএসএন: {"ফু": 'বার' N সংখ্যার স্বীকৃত জেএসওএন ব্যাকরণও পরিবর্তিত হয়, জাভাস্ক্রিপ্টে আপনি হেক্সাডেসিমাল লিটারাল ব্যবহার করতে পারেন, উদাহরণস্বরূপ 0xFF, বা (কুখ্যাত) অক্টাল লিটারালগুলি উদাহরণস্বরূপ 010. জেএসএনে আপনি ব্যবহার করতে পারেন কেবল দশমিক লিটারাল

// অবৈধ জেএসএন: {"ফু": 0xFF}


0

জাভাস্ক্রিপ্ট অবজেক্ট লিটারাল বনাম জেএসএন:

  • জাভাস্ক্রিপ্ট অবজেক্ট তৈরির জন্য অবজেক্ট আক্ষরিক সিনট্যাক্স একটি খুব সুবিধাজনক উপায়
  • JSONভাষা, যা 'জাভাস্ক্রিপ্ট অবজেক্ট নোটেশনে' ঘোরা, তার সিনট্যাক্স javascript অবজেক্ট সিনট্যাক্স থেকে উদ্ভূত হয়েছে। এটি প্রোগ্রামিং ভাষার স্বতন্ত্র পাঠ্য ডেটা ট্রান্সফার ফর্ম্যাট হিসাবে ব্যবহৃত হয়।

উদাহরণ:

কোডে সুবিধাজনকভাবে বস্তু তৈরি করতে জেএস-তে ব্যবহৃত জেএস অবজেক্ট স্বরলিপি:

const JS_Object = {
  1: 2,  // the key here is the number 1, the value is the number 2
  a: 'b', // the key is the string a, the value is the string b
  func: function () { console.log('hi') }
  // the key is func, the value is the function
}

জেএসএনের উদাহরণ:

{"widget": {
    "debug": "on",
    "window": {
        "title": "Sample Konfabulator Widget",
        "name": "main_window",
        "width": 500,
        "height": 500
    },
    "image": { 
        "src": "Images/Sun.png",
        "name": "sun1",
        "hOffset": 250,
        "vOffset": 250,
        "alignment": "center"
    },
    "text": {
        "data": "Click Here",
        "size": 36,
        "style": "bold",
        "name": "text1",
        "hOffset": 250,
        "vOffset": 100,
        "alignment": "center",
        "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
    }
}}

প্রধান পার্থক্য:

  • JSON এ থাকা সমস্ত অবজেক্ট কী অবশ্যই স্ট্রিং হওয়া উচিত। জাভাস্ক্রিপ্ট অবজেক্ট কী স্ট্রিং বা সংখ্যা হতে পারে

  • জেএসএনে সমস্ত স্ট্রিং অবশ্যই "ডাবল কোট" এ উদ্ধৃত করা উচিত। যেখানে জাভাস্ক্রিপ্টে একক উদ্ধৃতি এবং ডাবল উদ্ধৃতি উভয়ই অনুমোদিত। জাভাস্ক্রিপ্ট অবজেক্ট নোটেশনে কোনও উদ্ধৃতি না থাকলেও অবজেক্ট কীগুলি স্পষ্টভাবে স্ট্রিংগুলিতে কাস্ট করা হয়।

  • জেএসএনে কোনও ফাংশনকে কোনও সামগ্রীর মান হিসাবে সংজ্ঞায়িত করা যায় না (যেহেতু এটি জাভাস্ক্রিপ্ট নির্দিষ্ট)। জাভাস্ক্রিপ্টে এটি সম্পূর্ণ আইনী।

জাভাস্ক্রিপ্ট JSONঅবজেক্টে বিল্ড :

JSONঅবজেক্টগুলি সহজেই জাভাস্ক্রিপ্টে রূপান্তরিত হতে পারে এবং বিপরীতভাবে JSONঅবজেক্টটি ব্যবহার করে যা জাভাস্ক্রিপ্ট তার রানটাইমতে প্রস্তাব করে। উদাহরণ স্বরূপ:

const Object = {
  property1: true,
  property2: false,
}; // creating object with JS object literal syntax

const JSON_object = JSON.stringify(Object);  // stringify JS object to a JSON string

console.log(JSON_object); // note that the (string) keys are in double quotes

const JS_object = JSON.parse(JSON_object);  // parse JSON string to JS object

console.log(JS_object.property1, JS_object.property2); 
// accessing keys of the newly created object


0

এখানে একটি আশ্চর্যজনক পার্থক্য: আপনি undefinedজসন ব্যবহার করতে পারবেন না এবং অপরিজ্ঞাত মান সহ সমস্ত অবজেক্ট ক্ষেত্রগুলি পরে অদৃশ্য হয়ে যাবেJSON.stringify

let object =  { "a": undefined } ;

let badJSON= '{ "a": undefined }';


console.log('valid JS object :', object );
console.log('JSON from object:', JSON.stringify(object) );
console.log('invalid json    :', JSON.parse(badJSON) );

🙈🙉🙊

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