সতর্কতা: নির্ভরশীল পদ্ধতিগুলির জন্য JSON.parse
- অ্যারে এবং কোটের চারপাশে থাকা স্ট্রিংগুলি খুব বেশি পাস হবে (অর্থাত্ console.log(JSON.parse('[3]'), JSON.parse('"\uD800"'))
)
সমস্ত অ-অবজেক্ট জেএসওন আদিমতা (বুলিয়ান, নাল, অ্যারে, সংখ্যা, স্ট্রিং) এড়ানোর জন্য, আমি নিম্নলিখিতটি ব্যবহার করার পরামর্শ দিই:
/* Validate a possible object ie. o = { "a": 2 } */
const isJSONObject = (o) =>
!!o && (typeof o === 'object') && !Array.isArray(o) &&
(() => { try { return Boolean(JSON.stringify(o)); } catch { return false } })()
/* Validate a possible JSON object represented as string ie. s = '{ "a": 3 }' */
function isJSONObjectString(s) {
try {
const o = JSON.parse(s);
return !!o && (typeof o === 'object') && !Array.isArray(o)
} catch {
return false
}
}
কোড ব্যাখ্যা
- !! ও - মিথ্যা নয় (নাল বাদ দেয়, যা 'অবজেক্ট' হিসাবে নিবন্ধিত হয়)
- (টাইফফ ও === 'অবজেক্ট') - বুলিয়ান, সংখ্যা এবং স্ট্রিং বাদ দেয়
- ! অ্যারে.আইআরআরে (ও) - অ্যারেগুলি বাদ দিন (যা টাইপফোন 'অবজেক্ট' হিসাবে নিবন্ধিত)
- চেষ্টা করুন ... JSON.stringify / JSON.parse - জাভাস্ক্রিপ্ট ইঞ্জিনটি বৈধ JSON কিনা তা নির্ধারণের জন্য জিজ্ঞাসা করে
জেসনস্ট্রাকচার () উত্তরটি কেন ব্যবহার করবেন না?
আস্থা রাখা toString()
ভাল ধারণা নয়। এটি কারণ বিভিন্ন জাভাস্ক্রিপ্ট ইঞ্জিনগুলি একটি ভিন্ন স্ট্রিং উপস্থাপনা ফিরে আসতে পারে। সাধারণভাবে, যে পদ্ধতিগুলি এর উপর নির্ভর করে সেগুলি বিভিন্ন পরিবেশে ব্যর্থ হতে পারে বা পরে ব্যর্থ হতে পারে ইঞ্জিনের স্ট্রিং ফলাফলটি কখন পরিবর্তন করা উচিত
ব্যতিক্রম ধরা কেন হ্যাক নয়?
এটি উত্থাপিত হয়েছিল যে কোনও কিছুর বৈধতা নির্ধারণের জন্য ব্যতিক্রম ধরা কখনই সঠিক পথ হয় না। এটি সাধারণত ভাল পরামর্শ, তবে সবসময় না। এই ক্ষেত্রে, ব্যতিক্রম ধরা সম্ভবত সেরা রুট কারণ এটি জাভাস্ক্রিপ্ট ইঞ্জিনের JSON ডেটা বৈধকরণের প্রয়োগের উপর নির্ভর করে।
জেএস ইঞ্জিনের উপর নির্ভর করে নিম্নলিখিত সুবিধাগুলি সরবরাহ করে:
- জেএসএন স্পেস পরিবর্তন হওয়ার সাথে সাথে আরও নিখুঁত এবং ক্রমাগত আপ টু ডেট
- দ্রুত চালানোর সম্ভাবনা (এটি নিম্ন স্তরের কোড হিসাবে)
যখন জাভাস্ক্রিপ্ট ইঞ্জিনে ঝুঁকে পড়ার সুযোগ দেওয়া হবে, আমি এটি করার পরামর্শ দিই। বিশেষত তাই এই ক্ষেত্রে। যদিও এটি ব্যতিক্রমী হতে পারে বলে মনে হতে পারে তবে আপনি কেবলমাত্র একটি বাহ্যিক পদ্ধতি থেকে দুটি সম্ভাব্য রিটার্ন স্টেট পরিচালনা করছেন।
eval()
যদি এটিরundefined
পরে ফিরে আসে তবে এটি