মূল লেখায় যান
বাংলা
কাজের টেবিলযেসব সরঞ্জাম কিছুই আপলোড করে না
ODERSA সংস্থার একটি কর্মশালাকিছু বাইরে যায় না, কিছু জমা থাকে না, কিছু আমাদের কাছে পৌঁছায় না।

কর্মশালা · JSON সাজান

কীভাবে কাজ করে : JSON সাজান

বিশ্লেষকটি এখানেই হাতে লেখা, ব্রাউজারের কাছ থেকে ধার করা নয়: কারণ ব্রাউজারের ভুলের বার্তা কোনো মানেই বাঁধা নয়, আর সেটি ব্রাউজার ভেদে আলাদা। এটি বলে দেয় লাইন, কলাম আর সেখানে কী আশা করা হচ্ছিল, সব জায়গায় একই রকম।

সরঞ্জামটি খুলুন

কোনো প্রোগ্রাম একটি JSON ফাইল নিতে চাইছে না, আর ভুলের বার্তাটি কিছুই বলছে না: যিনি কোনো সেটিংস বা তথ্যের রপ্তানি নিয়ে কাজ করেন, এটি তাঁর রোজকার ব্যাপার। তাই একটি যাচাইকারীর প্রথম কাজ হল ঠিক কোথায় সেটি বলা, আর সেখানে কী আশা করা হচ্ছিল তাও।

এই কারণেই বিশ্লেষকটি ব্রাউজারের কাছ থেকে ধার না করে এখানেই লেখা। ভাষার মানটি ব্রাউজারকে কোন ধরনের ব্যতিক্রম তুলতে হবে তা বেঁধে দেয়, তার লেখাটি নয়: Firefox লাইন আর কলাম দেয়, Chrome বাইটে একটি অবস্থান দেয়, Safari এর একটিও দেয় না। যে সরঞ্জাম ওই বার্তাটি কপি করে সে তাই মানুষের ব্রাউজার ভেদে আলাদা আলাদা রোগনির্ণয় দেয়। আমাদেরটি নিজেই নিজের লাইন আর কলাম গোনে।

আর সে তিনটি জিনিস দেখতে পায়, যেগুলি ব্রাউজারের ফাংশনটি চুপচাপ গিলে ফেলে। দুবার থাকা চাবি: মানটি বলে সেগুলি অনন্য “হওয়া উচিত”, আর তেমন না হলে যে সফটওয়্যার ওই তথ্য পায় তার আচরণ আন্দাজ করা যায় না; বাস্তবে শেষেরটি প্রথমটিকে মুছে দেয়, আর একটি তথ্য একটি কথাও না বলে হারিয়ে যায়। একা পড়ে থাকা ইউনিকোডের অর্ধ-অক্ষরগুলি, যেগুলি কিছুই এনকোড করে না আর পিছনের অর্ধেক পাঠককে ভেঙে দেয়। আর ফাইলের গোড়ায় বাইটের ক্রমের চিহ্নটি, যেটি জুড়ে দেওয়া মানটি নিষেধ করে।

কীভাবে কাজ করে

  1. আপনার JSON-টি বসিয়ে দিন। সেটি আপনার ডিভাইস ছেড়ে যায় না, আর তথ্যের রপ্তানি বা পরিচয় নম্বর বয়ে চলা কোনো সেটিংসের ক্ষেত্রে সেটাই গোনার মতো।
  2. ইনডেন্টেশন বেছে নিন, আর পরে দুটি ফাইল মিলিয়ে দেখতে চাইলে চাবিগুলি সাজানোর ব্যবস্থাটিও।
  3. JSON-টি অবৈধ হলে লাইন, কলাম আর যে চিহ্নটি আশা করা হচ্ছিল তা পড়ুন। বৈধ হলে সতর্কতার ছকটি পড়ুন: দুবার থাকা চাবিগুলি ওখানেই লুকিয়ে থাকে।

গৃহীত ফরম্যাট

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

JSON ফরম্যাটের লেখা

চার লক্ষ চিহ্ন পর্যন্ত। ফলাফলটি .json হিসেবে ডাউনলোড করা যায়, বা এক ক্লিকে কপি করা যায়।

সামঞ্জস্যের ছক দেখুন

এর সীমা

সরঞ্জামটি মানটিই প্রয়োগ করে, কিছু প্রোগ্রামের ছাড়গুলি ছাড়াই

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

দুবার থাকা চাবিগুলি ধরিয়ে দেওয়া হয়, আপনার হয়ে কখনও শুধরে দেওয়া হয় না

মানটি লেখে যে একটি অবজেক্টের নামগুলি অনন্য হওয়া উচিত, আর তেমন না হলে যে সফটওয়্যার এই তথ্য পায় তার আচরণ আন্দাজ করা যায় না। বাস্তবে প্রায় সব বাস্তবায়নই শেষ মানটিই রাখে: একটি তথ্য একটি কথাও না বলে হারিয়ে যায়। সরঞ্জামটি সেগুলির নাম বলে দেয়, তাদের পথ আর লাইনসহ, তবে সাজানো ফাইলটি সবার মতোই শেষ মানটিই রাখে, কারণ উল্টোটা একটি চমক হত।

খুব বড় একটি সংখ্যা কয়েকটি অঙ্ক হারাতে পারে, আর সেটি আমাদের দোষ নয়

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

চাবিগুলির ক্রম রয়ে যায়, শুধু যেগুলি দেখতে সংখ্যার মতো সেগুলি ছাড়া

একটি JavaScript অবজেক্ট পূর্ণসংখ্যার মতো লেখা চাবিগুলিকে সবসময়ই সবার আগে বসায়, ছোট থেকে বড় ক্রমে, তাদের মূল অবস্থান যাই হোক। এটি ভাষারই একটি নিয়ম, আমাদের কোনো পছন্দ নয়, আর এই ভাষাটি হয়ে যায় এমন কোনো সরঞ্জামই এর হাত থেকে বাঁচে না। যে অবজেক্টের চাবিগুলি “10”, “2”, “1”, তাতে তাই মূল ক্রমটি হারিয়ে যায়। কথাটা চেপে যাওয়ার চেয়ে বলে দেওয়াই ভালো।

এই সরঞ্জাম নিয়ে প্রশ্ন

আমার তথ্য কি কোথাও পাঠানো হয়?

না, আর এখানে ব্যাপারটা অন্য যেকোনো জায়গার চেয়ে বেশি গোনার মতো: JSON ফরম্যাটের একটি সেটিংস প্রায়ই পরিচয় নম্বর, ভিতরের ঠিকানা, কখনও ঢোকার চাবিও বয়ে চলে। তিরিশ সেকেন্ডেই যাচাই করে নিন: F12 বোতাম দিয়ে ইন্সপেক্টর খুলুন, “Network” ট্যাব, তালিকাটি খালি করুন, তারপর আপনার JSON-টি বসিয়ে যাচাই করুন। একটি লাইনও আসে না। সংযোগ কেটে দিয়ে আবার করুন।

মন্তব্যওয়ালা আমার JSON বাতিল হয় কেন?

কারণ সেটি JSON নয়। মানটিতে কোনো মন্তব্যের কথাই নেই, আর তার লেখক নিজেই বুঝিয়ে বলেছেন যে তিনি ইচ্ছে করেই সেগুলি সরিয়ে দিয়েছেন। কয়েকটি ডেভেলপমেন্টের সরঞ্জাম সুবিধের জন্য সেগুলি মেনে নেয়, আর তাতেই বিভ্রান্তিটা বেঁচে থাকে: আপনার ফাইল আপনার কাছে চলে আর সত্যিকারের কাজে গিয়ে ব্যর্থ হয়। যে কারণে একটি যাচাইকারীর বাতিল করা উচিত, আমরাও সেই কারণেই বাতিল করি: আপনার ফাইলটি আসলে কী, সেই সত্যিটা আপনাকে বলা।

চাবি সাজানো কী কাজে লাগে?

মেলাতে। একই তথ্যের দুটি রপ্তানি দুটি আলাদা প্রোগ্রাম থেকে প্রায়ই আলাদা চাবির ক্রমে বেরোয়: তখন সোজাসুজি মেলালে শয়ে শয়ে মিথ্যে তফাত ফুটে ওঠে। দুটিকেই সাজিয়ে নিন, তারপর একই কোণের “দুটি লেখা মিলিয়ে দেখুন” সরঞ্জামে বসিয়ে দিন: কেবল সত্যিকারের তফাতগুলিই থেকে যাবে। এই পাতার সবচেয়ে কাজের কৌশলটি এটাই।

আপনারা দুবার থাকা চাবির কথা বলছেন: সেটা কি সত্যিই অনুমোদিত?

মানটি লেখে যে একটি অবজেক্টের নামগুলি অনন্য “হওয়া উচিত”, আর তেমন না হলে যে সফটওয়্যার তথ্যটি পায় তার আচরণ আন্দাজের বাইরে চলে যায়। তাই এটি নিষিদ্ধও নয়, নিরাপদও নয়। বাস্তবে প্রায় সব বাস্তবায়নই শেষ মানটি রাখে আর প্রথমটি একটি কথাও না বলে ফেলে দেয়: একই অবজেক্টে “দাম” চাবিটি দুবার থাকলে দুটি দামের একটির অস্তিত্বই আর নেই। ঠিক এই ধরনের সমস্যাই দুই ঘণ্টা ধরে খোঁজা হয়, আর এই কারণেই আমরা কথাটা ধরিয়ে দিই।

উনিশ অঙ্কের আমার পরিচয় নম্বরটি সাজানোর পরে বদলে গেছে।

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