মূল বিষয়বস্তুতে যান
CuteJSON
↑↓ নেভিগেট Enter নির্বাচন Esc বন্ধ

JSON কিভাবে JavaScript অবজেক্ট লিটারালে রূপান্তর করবেন এবং ফিরে

প্রকাশিত 3 মিনিট পড়ুন Akash Kinkar Pandey দ্বারা

প্রতিটি JSON নথি ইতিমধ্যে একটি বৈধ JavaScript এক্সপ্রেশন। আপনি JSON-কে একটি const config = অ্যাসাইনমেন্টে পেস্ট করতে পারেন এবং এটি চলে। মজার কাজ হলো উল্টোটা: প্রকৃত JavaScript অবজেক্ট লিটারাল JSON-এ নিষিদ্ধ জিনিসপুর্তে পূর্ণ, এবং একটি কনভার্টার যা অনুমান করে তারা কী ছিল ডেটা হারায় সফলতা রিপোর্ট করার সাথে সাথে।

JSON to JavaScript কনভার্টার ব্যবহার করা

একটি দিক বেছে নিন এবং Convert চাপুন। JavaScript লিখে, একটি অবজেক্টের কী যা একটি বৈধ আইডেন্টিফায়ার তাকে কোট ছাড়াই লেখা হয়, তাই "name" হয়ে যায় name, অন্যদিকে "display name" এর মতো কী কোট সহ থাকে কারণ এটিকে কোট ছাড়াই লেখলে বানান বদলে যায়। একটি খালি অবজেক্ট বা অ্যারে এক লাইনে থাকে। সংখ্যাগুলি টোকেন স্ট্রিম দিয়ে যায় JSON.parse দিয়ে নয়, তাই একটি কুড়ি অংকের পূর্ণসংখ্যা সব কুড়ি অংক নিয়ে ফিরে আসে।

রিডার কী গ্রহণ করে

JavaScript পুনরায় JSON-এ পড়ে, টুল সেই অবজেক্ট লিটারাল বোঝে যা আপনি সত্যিই একটি কনফিগ ফাইল থেকে পেস্ট করবেন: কোট ছাড়ার কী, সিঙ্গেল কোটেড স্ট্রিং, // এবং /* */ কমেন্ট, ট্রেইলিং কমা, এবং শুরুতে একটি ঐচ্ছিক const, let বা var নাম এবং শেষে একটি সেমিকোলন। ইন্টারপোলেশন ছাড়া একটি টেমপ্লেট লিটারালও গ্রহণযোগ্য, কারণ এতে প্লেইন টেক্স্ট থাকে।

JSON প্রত্যাখ্যান করা সংখ্যার বানানকে এর সঠিক JSON রূপে নরমালাইজ করা হয়:

const numbers = { a: .5, b: 5., c: 5.e3 }
{
  "a": 0.5,
  "b": 5,
  "c": 5e3
}

কী প্রত্যাখ্যান হয়, এবং কেন

JSON যা ধরতে পারে না তা অনুমানের পরিবর্তে নাম দিয়ে প্রত্যাখ্যান হয়। undefined, NaN এবং Infinity-র কোনো JSON সংখ্যা বা মান নেই, তাই সেগুলি প্রত্যাখ্যান হয়। হেক্স, অক্টাল এবং বাইনারি সংখ্যা, 1_000-এর মতো আন্ডারস্কোর ডিজিট সেপারেটর, এবং একটি লিডিং জিরোও, যার সবকিছুর অর্থ বদলে যেত যদি JSON সেগুলি পড়ত। একটি রেগুলার এক্সপ্রেশন, একটি ফাংশন, একটি নাঙ্গা শব্দ, এবং ${...} টেমপ্লেট ইন্টারপোলেশনও প্রত্যাখ্যান হয়, কারণ এগুলি কোড, ডেটা নয়।

দুটি প্রত্যাখ্যান আরো ঘনিষ্ঠভাবে দেখার যোগ্য। একটি অবজেক্টে দুবার আসা একটি কী প্রত্যাখ্যান হয়, কারণ JSON-এর একই নামের নিচে দুটি মান ধরার কোনো উপায় নেই। এবং __proto__ কী যার মান অবজেক্ট বা null সেটিও প্রত্যাখ্যান হয়, কারণ JavaScript অবজেক্ট লিটারালে সেই বানান কোনো প্রপার্টি তৈরি করে না। এটি নতুন অবজেক্টের প্রোটোটাইপ সেট করে, তাই এটিকে একটি সাধারণ __proto__ কী দিয়ে JSON-এ রূপান্তর করলে এমন একটি প্রপার্টি তৈরি হবে যা মূল কোডে কখনই ছিল না।

undefined ডিফল্টে null-এ কেন রূপান্তরিত হয় না

JSON-এ undefined নেই, তাই একটি কনভার্টার কিছু না কিছু করতে হয়। null লিখলে চুপচাপে ডেটার অর্থ বদলে যায়: একটি কনফিগ অবজেক্টে undefined সাধারণত মানে একটি ফিল্ড এখনো কনফিগ করা হয়নি, যা সেই null-এর মতো নয় যাকে কোড পরে চেক করে। টুল ডিফল্টে প্রত্যাখ্যান করে, এবং Convert undefined to null অপশন তখন থাকে যখন আপনি সত্যিই সেই অর্থ চান।

রাউন্ড ট্রিপিং

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

সব পোস্টে ফিরুন