"ইভাল ()" এবং "JSON.parse ()" কৌশলগুলি পারস্পরিক একচেটিয়া বিন্যাসগুলি ব্যবহার করে।
- "ইভাল ()" সহ প্রথম বন্ধনী আবশ্যক ।
- "JSON.parse ()" দিয়ে প্রথম বন্ধনী নিষিদ্ধ ।
সাবধান, সেখানে "স্ট্রিংফাই ()" ফাংশন রয়েছে যা "ইওল" ফর্ম্যাট তৈরি করে। এজ্যাক্সের জন্য আপনার কেবল জেএসএন ফর্ম্যাট ব্যবহার করা উচিত।
"জাফর" পুরো জাভাস্ক্রিপ্ট ভাষা অন্তর্ভুক্ত করার সময়, জেএসওএন কেবলমাত্র ভাষার একটি ক্ষুদ্র উপসেট ব্যবহার করে। জাভাস্ক্রিপ্ট ভাষার যে নির্মাণগুলির মধ্যে ";ভাল" অবশ্যই সনাক্ত করতে হবে তা হ'ল "ব্লক স্টেটমেন্ট" (ওরফে "যৌগিক বিবৃতি") ; যা একটি জুড়ি বা কোঁকড়া ধনুর্বন্ধনী "{}" ভিতরে কিছু বিবৃতি সহ। তবে কোঁকড়া ধনুর্বন্ধনী এছাড়াও বস্তুর আক্ষরিক বাক্য গঠন ব্যবহার করা হয়। কোডটি যে প্রসঙ্গে কোডটি উপস্থিত হয় তার দ্বারা ব্যাখ্যাটি পৃথক হয়। কিছু আপনার কাছে আক্ষরিক কোনও অবজেক্টের মতো দেখায়, তবে "ইভাল" এটিকে যৌগিক বিবৃতি হিসাবে দেখবে।
জাভাস্ক্রিপ্ট ল্যাঙ্গুয়েজে অবজেক্ট লিটারেলগুলি একটি অ্যাসাইনমেন্টের ডানদিকে ঘটে।
var myObj = { ...some..code..here... };
অবজেক্ট লিটারেলগুলি তাদের নিজেরাই ঘটে না।
{ ...some..code..here... }
২০০৪ সালে ওপির মূল প্রশ্নটির দিকে ফিরে জিজ্ঞাসা করে তিনি অনুসন্ধান করেছিলেন যে নিম্নলিখিতগুলি "ইভাল ()" এ কেন ব্যর্থ হয়:
{ title: "One", key: "1" }
উত্তরটি হ'ল এটি একটি যৌগিক বিবৃতি মত দেখাচ্ছে। এটিকে কোনও বস্তুতে রূপান্তর করতে, আপনাকে অবশ্যই এটি একটি প্রসঙ্গে স্থাপন করতে হবে যেখানে যৌগিক বিবৃতি অসম্ভব। এটি এর চারপাশে প্রথম বন্ধনী রেখে is
( { title: "One", key: "1" } ) // not a compound statment, so must be object literal
ওপি এছাড়াও কেন একটি অনুরূপ বিবৃতি করেনি সফলভাবে Eval:
[ { title: "One", key: "1" }, { title: "Two", key: "2" } ]
একই উত্তরটি প্রযোজ্য - কোঁকড়া ধনুর্বন্ধনী একটি প্রসঙ্গে যেখানে যৌগিক বিবরণ অসম্ভব। এটি একটি অ্যারে প্রসঙ্গ, " [...]
" এবং অ্যারেতে বস্তু থাকতে পারে তবে সেগুলিতে বিবৃতি থাকতে পারে না।
"ইভাল ()" এর বিপরীতে, জেএসএন এর ক্ষমতার মধ্যে খুব সীমাবদ্ধ। সীমাবদ্ধতা ইচ্ছাকৃত। জেএসএনের ডিজাইনার জাভাস্ক্রিপ্টের একটি ন্যূনতম উপসেটটি উদ্দেশ্য করে কেবল একটি বাক্য গঠন ব্যবহার করেছিলেন যা কোনও কার্যের ডানদিকে প্রদর্শিত হতে পারে। সুতরাং আপনার যদি এমন কিছু কোড থাকে যা JSON এ সঠিকভাবে পার্স করে ...
var myVar = JSON.parse("...some...code...here...");
... এটি সূচিত করে যে এটি কোনও আইনীভাবে কোনও অ্যাসাইনমেন্টের ডানদিকে পার্স করবে, এর মতো ..
var myVar = ...some..code..here... ;
তবে এটি কেবল জেএসএন-তে সীমাবদ্ধতা নয়। তাদেরকে JSON জন্য বিএনএফ ভাষা স্পেসিফিকেশন খুবই সহজ। উদাহরণস্বরূপ, এটি একক উদ্ধৃতি ব্যবহার করে স্ট্রিংগুলি (জাভাস্ক্রিপ্ট এবং পার্ল ডু এর মতো) নির্দেশ করতে দেয় না এবং এটি কোনও বাইট হিসাবে (যেমন 'সি' করে) কোনও অক্ষর প্রকাশ করার উপায় পায় না। দুর্ভাগ্যক্রমে, এটি মন্তব্যের অনুমতি দেয় না (কনফিগারেশন ফাইলগুলি তৈরি করার সময় যা সত্যিই দুর্দান্ত হবে)। এই সমস্ত সীমাবদ্ধতার উল্টো দিক হল JSON পার্সিং দ্রুত এবং কোড ইঞ্জেকশন (সুরক্ষা হুমকি) এর জন্য কোনও সুযোগ দেয় না।
এই সীমাবদ্ধতার কারণে, জেএসএনের বন্ধনীগুলির কোনও ব্যবহার নেই। ফলস্বরূপ, জেএসএন স্ট্রিংয়ের একটি প্রথম বন্ধনী একটি অবৈধ চরিত্র।
সর্বদা নিম্নলিখিত কারণে এজ্যাক্স সহ জেএসএন ফর্ম্যাটটি ব্যবহার করুন:
- একটি সাধারণ এজাক্স পাইপলাইন জেএসএনের জন্য কনফিগার করা হবে।
- "ইভাল ()" ব্যবহারের বিষয়টি সুরক্ষা ঝুঁকি হিসাবে সমালোচিত হবে।
একটি আজাক্স পাইপলাইনের উদাহরণ হিসাবে, এমন একটি প্রোগ্রাম বিবেচনা করুন যাতে নোড সার্ভার এবং একটি জিকুয়েরি ক্লায়েন্ট জড়িত। ক্লায়েন্ট প্রোগ্রামটি ফর্মযুক্ত একটি jQuery কল ব্যবহার করে $.ajax({dataType:'json',...etc.});
। জিকুয়েরি পরবর্তী ব্যবহারের জন্য একটি জকিএক্সএইচআর এইচটি তৈরি করে, তারপরে প্যাকেজগুলি যুক্ত করে এবং অনুরোধটি প্রেরণ করে। সার্ভারটি অনুরোধটি গ্রহণ করে, এটি প্রক্রিয়া করে এবং তারপরে প্রতিক্রিয়া জানাতে প্রস্তুত। সার্ভার প্রোগ্রামটি পদ্ধতিটিকে res.json(data)
প্যাকেজে ডাকবে এবং প্রতিক্রিয়া পাঠাবে। ক্লায়েন্ট পাশ ফিরে, jQuery প্রতিক্রিয়া গ্রহণ করে, সম্পর্কিত jqXHR অবজেক্টের সাথে পরামর্শ করে এবং JSON ফর্ম্যাট করা ডেটা প্রক্রিয়া করে। এই সমস্ত ম্যানুয়াল ডেটা রূপান্তর প্রয়োজন ছাড়া কাজ করে। প্রতিক্রিয়াটিতে নোড সার্ভারে JSON.stringify () এ কোনও স্পষ্ট কল নেই এবং ক্লায়েন্টে JSON.parse () তে কোনও স্পষ্ট কল নেই; এই সব আপনার জন্য পরিচালিত।
"ইভাল" এর ব্যবহার কোড ইনজেকশন সুরক্ষা ঝুঁকির সাথে সম্পর্কিত। আপনি ভাবতে পারেন যে এটি হওয়ার কোনও উপায় নেই তবে হ্যাকাররা বেশ সৃজনশীল হতে পারেন। এছাড়াও, জাভাস্ক্রিপ্ট অপ্টিমাইজেশনের জন্য "ইভাল" সমস্যাযুক্ত।
আপনি যদি একটি "স্ট্রিংফাই ()" ফাংশন ব্যবহার করে নিজেকে খুঁজে পান তবে সচেতন হন যে সেই নামটি সহ কিছু ফাংশন এমন স্ট্রিং তৈরি করবে যা জেএসএনের সাথে নয় "ইওলাল" এর সাথে সামঞ্জস্যপূর্ণ। উদাহরণস্বরূপ, নোডে, নিম্নলিখিতটি আপনাকে ফাংশন দেয় যা "ইওল" সামঞ্জস্যপূর্ণ ফর্ম্যাটে স্ট্রিং তৈরি করে:
var stringify = require('node-stringify');
এটি কার্যকর হতে পারে, তবে আপনার নির্দিষ্ট প্রয়োজন না থাকলে সম্ভবত এটি আপনি চান তা নয়।