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


208

আমি জাভাস্ক্রিপ্ট অবজেক্ট এবং জেএসএন স্ট্রিংয়ের মধ্যে স্পষ্টত বুনিয়াদি বুঝতে চাই।

ধরা যাক আমি নিম্নলিখিত জেএস ভেরিয়েবলটি তৈরি করি:

var testObject = {one: 1,"two":2,"three":3};

চতুর্থাংশ 1। কী / সম্পত্তির নাম কোট সহ / ছাড়া উভয়ই বৈধ? (যেমন "one" : 1)

হ্যাঁ, পার্থক্য কি?

প্রশ্ন 2: আমি যদি উপরের বিষয়টিকে ব্যবহার করে রূপান্তর করি JSON.stringify(testObject)তবে মূল জেএস বস্তু এবং জেএসওনের মধ্যে পার্থক্য কী?

আমি মনে করি তারা প্রায় একই রকম। দয়া করে এ সম্পর্কে বিস্তারিত বলুন।

Q3: একটি JSON স্ট্রিং বিশ্লেষণের জন্য, নীচের পদ্ধতিটি কি প্রস্তাবিত?

var javascriptObj = JSON.parse(jSonString);

উত্তর:


239
  1. কী / সম্পত্তির নাম কোট সহ / ছাড়া উভয়ই বৈধ?

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

  2. যদি আমি উপরের বিষয়টিকে JSON ব্যবহার করে রূপান্তর করি var jSonString = JSON.stringify(testObject);তবে 2 (জেএস আপত্তি এবং জেএসএন) এর মধ্যে পার্থক্য কী?

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

    এখানে একটি গল্প। আসুন কল্পনা করুন যে আপনি কোনও দোকান থেকে কিছু আসবাব কিনেছেন এবং আপনি এটি সরবরাহ করতে চান। তবে মজুতের একমাত্র বাকী হ'ল প্রদর্শন মডেল, তবে আপনি এটি কিনতে সম্মত হন।

    দোকানে, আপনি কিনেছেন বুক অফ ড্রয়ারগুলি একটি জীবন্ত বস্তু:

    var chestOfDrawers = {
        color: "red",
        numberOfDrawers: 4
    }

    যাইহোক, আপনি পোস্টে বুক অফ ড্রয়ারগুলি প্রেরণ করতে পারবেন না, সুতরাং আপনি এটিকে ভেঙে ফেলুন (পড়ুন, স্ট্রিংফাই করুন)। আসবাবের ক্ষেত্রে এটি এখন অকেজো। এটি এখন জেএসএন। এটি ফ্ল্যাট প্যাক আকারে।

    {"color":"red","numberOfDrawers":4}

    আপনি যখন এটি পান, আপনি তারপরে বুকের আঁকারগুলি পুনরায় তৈরি করুন (এটি পড়ুন, পার্স করুন)। এটি এখন কোনও অবজেক্ট ফর্মে ফিরে এসেছে।

    জেএসএন / এক্সএমএল এবং ওয়াইএএমএলের পিছনে কারণ হ'ল উভয় অংশীদার ভাষা বুঝতে পারে এমন ফর্ম্যাটে প্রোগ্রামিং ভাষার মধ্যে ডেটা স্থানান্তর করতে সক্ষম করা; আপনি সরাসরি আপনার জাভাস্ক্রিপ্ট অবজেক্টটি পিএইচপি বা সি ++ দিতে পারবেন না; কারণ প্রতিটি ভাষা হুডের নীচে পৃথকভাবে কোনও বস্তুর প্রতিনিধিত্ব করে। যাইহোক, কারণ আমরা জেএসএন নোটেশনে বস্তুটি স্ট্রাইটিং করেছি; অর্থাত্ উপাত্ত উপস্থাপনের একটি প্রমিত উপায়, আমরা বস্তুর JSON উপস্থাপনাটি অন্য ল্যাঙ্গেজ (সি ++, পিএইচপি) এ প্রেরণ করতে পারি , তারা জাভাস্ক্রিপ্ট অবজেক্টটি আমাদের নিজের বস্তুতে জেএসএন উপস্থাপনার ভিত্তিতে পুনরায় তৈরি করতে পারে ।

    এটি লক্ষণীয় গুরুত্বপূর্ণ যে জেএসএন কার্য বা তারিখগুলি উপস্থাপন করতে পারে না। যদি আপনি কোনও ফাংশন সদস্যের সাথে কোনও বস্তুকে স্ট্রিংফাই করার চেষ্টা করেন তবে ফাংশনটি JSON উপস্থাপন থেকে বাদ দেওয়া হবে। একটি তারিখ একটি স্ট্রিংয়ে রূপান্তরিত হবে;

    JSON.stringify({
        foo: new Date(),
        blah: function () { 
            alert('hello');
        }
    }); // returns the string "{"foo":"2011-11-28T10:21:33.939Z"}"
  3. একটি JSON স্ট্রিং বিশ্লেষণের জন্য, নীচের পদ্ধতিটি কি সুপারিশ করা হয়েছে? var javascriptObj = JSON.parse(jSonString);

    হ্যাঁ, তবে পুরানো ব্রাউজারগুলি JSON স্থানীয়ভাবে সমর্থন করে না (IE <8) । এগুলিকে সমর্থন করার জন্য আপনার অন্তর্ভুক্ত করা উচিত json2.js

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


4
@testndtv আপনি বিন্দু দিতে ভুলে গেছেন - যদিও কাগজে (অথবা পর্দায়) একটি JSON স্ট্রিংকে এবং প্রদর্শন একটি জাতীয় বস্তু পারে চেহারা একই, তারা না একই জিনিস। জেএসএন হ'ল একটি পংক্তিতে কোনও বস্তুকে প্যাক করার জন্য, তাই এটি কোথাও স্থানান্তরিত হতে পারে এবং পরে কোনও বস্তুতে আনপ্যাক করা যায়।
Alnitak

1
@ ম্যাট দুর্বল উপমা আইএমএইচও - জেএসওএন ব্যবহার করা উচিত নয় এমন কোনও বস্তুর ক্রিয়াকলাপ করতে - কেবল খাঁটি ডেটা অবজেক্টের জন্য।
Alnitak

1
সুতরাং যদি কোনও জেএস অবজেক্টের পদ্ধতি থাকে, তবে জেএসওএন স্ট্রিংয়ে রূপান্তর করা পুরোপুরি এটিকে উপেক্ষা করবে ... উপরের ক্ষেত্রে যেমন getIn এবং getOut সম্পূর্ণ উপেক্ষা করা হবে .... এটি কীভাবে এটি কাজ করে?
testndtv

3
@Growler: সাধারণত আমি তাদেরকে JSON ব্যবহার করেন "জিনিস" চাহিদা করা উত্পন্ন সার্ভারে, এবং একটি JS ফাইল ব্যবহার যদি "জিনিস" ঠিক হয় পরিবেশিত হিসাবে হয়। অন্যান্য বড় ডিফারেন্টিটারটি হ'ল আপনাকে ফাংশন এবং / অথবা তারিখগুলি অন্তর্ভুক্ত করা দরকার কিনা, কারণ জেএসএন তাদের প্রতিনিধিত্ব করতে পারে না, সুতরাং আপনাকে অবশ্যই জেএস ফাইল পরিবেশন করতে হবে। আপনি যদি এখনও অনিশ্চিত হন তবে স্ট্যাক ওভারফ্লো (আপনার কথোপকথনের প্রতিনিধিত্ব করার জন্য যে সামগ্রীটি আপনাকে সরবরাহ করতে হবে তার একটি উদাহরণ দেখান) হিসাবে আলাদা প্রশ্ন হিসাবে নির্দ্বিধায় জিজ্ঞাসা করুন এবং লিঙ্কটি নিয়ে আমাকে উত্সাহিত করুন; আমি কাছাকাছি চেহারা খুশি হবে!
ম্যাট

4
@ ম্যাট ইউ স্যার, আপনি কি # রাজা প্রতিভা! আপনার ব্যাখ্যাটি স্পট, স্পষ্ট, সংক্ষিপ্ত এবং বুঝতে সহজ। আমি চাই আপনি আমার জাভাস্ক্রিপ্ট / প্রোগ্রামিং পরামর্শদাতা।
ফ্র্যাঙ্কড্রুস

30

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

a = { "!": 1234 } // Valid
a = { !: 1234 } //  Syntax error

যদিও বেশিরভাগ ক্ষেত্রে, আপনি অবজেক্ট ল্যাটারালগুলিতে কীগুলির চারপাশে উদ্ধৃতিগুলি বাদ দিতে পারেন।

প্রশ্ন 2: জেএসএন আক্ষরিকভাবে একটি স্ট্রিং প্রতিনিধিত্ব। এটি কেবল একটি স্ট্রিং। সুতরাং, এটি বিবেচনা করুন:

var testObject = { hello: "world" }
var jSonString = JSON.stringify(testObject);

যেহেতু testObjectএকটি আসল অবজেক্ট তাই আপনি এতে বৈশিষ্ট্যগুলি কল করতে পারেন এবং অবজেক্টগুলির সাথে আপনি যা কিছু করতে পারেন তা করতে পারেন:

testObject.hello => "world"

অন্যদিকে, jsonStringকেবল একটি স্ট্রিং:

jsonString.hello => undefined

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

চতুর্থাংশ 3। আপনি একটি জেএসএন স্ট্রিং ব্যবহার করে পার্স করতে পারেন JSON.parse, এবং এটি এটি করার সর্বোত্তম উপায় (যদি ব্রাউজার বা কোনও ফ্রেমওয়ার্ক এটি সরবরাহ করে)। আপনি কেবল ব্যবহার করতে পারেন evalযেহেতু জেএসএন বৈধ জাভাস্ক্রিপ্ট কোড, তবে পূর্ববর্তী পদ্ধতিটি বেশ কয়েকটি কারণে সুপারিশ করা হয় (এভাল এর সাথে সম্পর্কিত অনেকগুলি বাজে সমস্যা রয়েছে)।


9

JSON দ্বারা সমস্যার সমাধান

ধরা যাক আপনি দুটি কম্পিউটারের মধ্যে নিয়মিত জাভাস্ক্রিপ্ট অবজেক্ট এক্সচেঞ্জ করতে চান এবং আপনি দুটি নিয়ম সেট করেছেন:

  • প্রেরিত ডেটা অবশ্যই একটি নিয়মিত স্ট্রিং হতে হবে।
  • শুধুমাত্র বৈশিষ্ট্যগুলি বিনিময় করা যায়, পদ্ধতিগুলি সংক্রমণিত হয় না।

এখন আপনি প্রথম হোস্টে দুটি অবজেক্ট তৈরি করুন:

var obj1 = { one: 1,"two":2,"three":3 }; // your example
var obj2 = { one: obj1.one, two: 2, three: obj1.one + obj1.two };

কীভাবে আপনি এই হোস্টগুলিকে দ্বিতীয় হোস্টে স্থানান্তর করার জন্য স্ট্রিংয়ে রূপান্তর করতে পারেন?

  • প্রথম অবজেক্টের জন্য, আপনি এই স্ট্রিংটি আক্ষরিক সংজ্ঞা আকারে পাঠাতে '{ one: 1,"two":2,"three":3 }'পারেন তবে আসলে আপনি নথির স্ক্রিপ্ট অংশে আক্ষরিক পড়তে পারবেন না (কমপক্ষে সহজেই সহজে নয়)। সুতরাং obj1এবং obj2অবশ্যই একইভাবে প্রক্রিয়া করা উচিত।
  • আপনাকে সমস্ত বৈশিষ্ট্য এবং তাদের মান গণনা করতে হবে, এবং বস্তুর আক্ষরিক মতো একটি স্ট্রিং তৈরি করতে হবে।

জেএসএনকে কেবল আলোচিত প্রয়োজনগুলির সমাধান হিসাবে তৈরি করা হয়েছে: সমস্ত বৈশিষ্ট্য এবং মানগুলি (পদ্ধতি উপেক্ষা করা হয়) তালিকাভুক্ত করে কোনও সামগ্রীর সমতুল্য স্ট্রিং তৈরি করা নিয়মের একটি সেট।

জেএসএন বৈশিষ্ট্যযুক্ত নাম এবং মানগুলির জন্য ডাবল-কোটের ব্যবহারকে সাধারণ করে তোলে।

মনে রাখবেন যে জেএসএন হ'ল নিয়মের একটি সেট (একটি মান)।

কতটি JSON অবজেক্ট তৈরি করা হয়েছে?

শুধুমাত্র একটি, এটি স্বয়ংক্রিয়ভাবে জেএস ইঞ্জিন দ্বারা তৈরি করা হয়েছে।

ব্রাউজারগুলিতে পাওয়া আধুনিক জাভাস্ক্রিপ্ট ইঞ্জিনগুলির একটি নেটিভ অবজেক্ট রয়েছে যার নামও জেএসওএন। এই JSON অবজেক্টটি সক্ষম:

  • JSON.parse (স্ট্রিং) ব্যবহার করে JSON স্ট্যান্ডার্ড ব্যবহার করে নির্মিত একটি স্ট্রিং ডিকোড করুন। ফলাফলটি JSON স্ট্রিংয়ে পাওয়া বৈশিষ্ট্য এবং মান সহ একটি নিয়মিত জেএস অবজেক্ট।

  • JSON.stringify () ব্যবহার করে নিয়মিত জেএস অবজেক্টের বৈশিষ্ট্য / মানগুলি এনকোড করুন। ফলাফলটি JSON নিয়মের সেটটির সাথে সম্মতিযুক্ত একটি স্ট্রিং।

(একক) JSON অবজেক্টটি কোনও কোডেকের মতো, এটির কাজটি এনকোড এবং ডিকোড করা।

মনে রাখবেন যে:

  • JSON.parse () একটি JSON অবজেক্ট তৈরি করে না, এটি একটি নিয়মিত জেএস অবজেক্ট তৈরি করে, কোনও JSON- পারপ্লেস স্ট্রিং থেকে JSON.parse () দ্বারা নির্মিত একটি অবজেক্ট ব্যবহার করে তৈরি করা কোনও অবজেক্টের মধ্যে কোনও পার্থক্য নেই।

  • কেবলমাত্র একটি JSON অবজেক্ট রয়েছে, যা সমস্ত রূপান্তরগুলির জন্য ব্যবহৃত হয়।

প্রশ্নগুলিতে ফিরে যাওয়া :

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

  • প্রশ্ন 2: আক্ষরিক থেকে তৈরি এবং JSON.parse () ব্যবহার করে অবজেক্টগুলি কঠোরভাবে একই। এই দুটি বস্তু তৈরির পরে সমান:

    var obj1 = { one: 1, "two": 2, "three": 3 };
    var obj2 = JSON.parse('{ "one": "1", "two": "2", "three": "3" }');

  • Q3: আধুনিক ব্রাউজারগুলিতে JSON.parse()একটি জেএসএন-সম্মতিযুক্ত স্ট্রিং থেকে জেএস অবজেক্ট তৈরি করতে ব্যবহৃত হয়। (jQuery এরও একটি সমতুল্য পদ্ধতি রয়েছে যা সমস্ত ব্রাউজারের জন্য ব্যবহার করা যেতে পারে)।


7

কিউ 1 - জেএসে আপনাকে কেবলমাত্র উদ্ধৃতি ব্যবহার করতে হবে যদি কীটি কোনও সংরক্ষিত শব্দ হয় বা অন্যথায় এটি অবৈধ টোকেন হয়। জেএসএন-এ আপনাকে সর্বদা কী নামে ডাবল উক্তি ব্যবহার করা উচিত।

প্রশ্ন 2 - jsonStringএকটি সিরিয়ালযুক্ত ইনপুট বস্তুর সংস্করণ ...

Q3 - যা ব্যবহার করে কোনও অভিন্ন দেখানো অবজেক্টের ডিসরিয়ালাইজড হতে পারেJSON.parse()


1

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

// Valid JSON strings(Observe quotes)
valid_json = '{"key":"value"}'
valid_json_2 = '{"key 1":"value 1"}' // Observe the space(special character) in key - still valid


//Valid Javascript object
valid_javascript_object_no_quotes = {
    key: "value"  //No special character in key, hence it is valid without quotes for key
}


//Valid Javascript object
valid_javascript_object_quotes = {
    key:"value",  //No special character in key, hence it is valid without quotes for key
    "key 1": "value 1" // Space (special character) present in key, therefore key must be contained in double quotes  - Valid
}



console.log(typeof valid_json) // string
console.log(typeof valid_javascript_object_no_quotes) // object
console.log(typeof valid_javascript_object_quotes) // object

//Invalid Javascript object 
invalid_javascript_object_no_quotes = {
   key 1: "value"//Space (special character) present in key, since key is not enclosed with double quotes "Invalid Javascript Object"
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.