সরঞ্জামটি কী করে
আপনার কাছে যদি একটি CSV ফাইল থাকে—যেখানে তথ্য কমা, সেমিকোলন বা ট্যাব দিয়ে পৃথক করা সারি ও কলাম আকারে সাজানো থাকে—এবং আপনি সেটিকে JSON ফরম্যাটে রূপান্তর করতে চান, তাহলে এই পৃষ্ঠাটি সেই কাজটি করে। আপনি ফাইলটি টেনে এনে ড্রপ করেন অথবা আপনার ডিভাইস থেকে নির্বাচন করেন, আউটপুট ফরম্যাট হিসেবে “JSON” বেছে নেন, আপনার CSV-তে যদি কমা ছাড়া অন্য কোনো বিভাজক ব্যবহার করা হয় তবে সেটি নির্ধারণ করেন, তারপর ফলাফল প্রিভিউ করে দেখেন এবং তৈরি JSON ফাইল ডাউনলোড করেন।
CSV ফাইলটি মূলত একটি ফ্ল্যাট টেবিল: প্রতিটি সারি একটি রেকর্ড, প্রতিটি কলাম একটি ক্ষেত্র। JSON-এ এই তথ্য সাধারণত অবজেক্টের একটি অ্যারে হিসেবে রূপান্তরিত হয়, যেখানে প্রতিটি সারি একটি অবজেক্ট এবং প্রতিটি কলামের নাম সেই অবজেক্টের একটি কী। উদাহরণস্বরূপ, একটি CSV ফাইল যাতে “নাম”, “বয়স”, “শহর” কলাম আছে, সেটি JSON-এ রূপান্তরিত হবে এমন:
[
{"নাম": "রহিম", "বয়স": "30", "শহর": "ঢাকা"},
{"নাম": "করিম", "বয়স": "25", "শহর": "চট্টগ্রাম"}
]
লক্ষ করুন যে প্রতিটি মানই টেক্সট হিসেবে রইল—সংখ্যা “30” টেক্সট স্ট্রিং হিসেবেই JSON-এ সংরক্ষিত হলো। এই বিষয়টি পরবর্তী অংশে বিস্তারিত আলোচনা করা হবে।
এই পৃষ্ঠাটি কীভাবে আলাদা
CSV থেকে JSON রূপান্তরের সরঞ্জাম অনেক আছে, কিন্তু এই পৃষ্ঠাটির তিনটি বিশেষ বৈশিষ্ট্য আছে যা এটিকে অন্যদের থেকে আলাদা করে।
টাইপ স্বয়ংক্রিয়ভাবে নির্ধারিত হয় না
CSV-তে সবকিছুই ফ্ল্যাট টেক্সট হিসেবে সংরক্ষিত হয়। কোনো সংখ্যা, বুলিয়ান, null বা জটিল কাঠামো নেই। অন্যদিকে JSON সংখ্যা, বুলিয়ান, null এবং নেস্টেড অবজেক্ট সমর্থন করে। কিন্তু এই সরঞ্জামটি CSV-এর প্রতিটি ফিল্ডকে কেবল স্ট্রিং হিসেবেই JSON-এ রাখে। অর্থাৎ কোনো দাম, পরিমাণ, তারিখ বা লিডিং জিরো (যেমন পোস্টকোড “০০৭৮৯”) স্বয়ংক্রিয়ভাবে সংখ্যায় রূপান্তরিত হয় না। সেগুলি স্ট্রিং হিসেবেই থেকে যায়, যতক্ষণ না আপনি ডাউনলোডের পর নিজে ম্যানুয়ালি রূপান্তর করেন।
এই নকশার পিছনে যুক্তি হলো: CSV-তে কোনো টাইপ মেটাডেটা নেই, তাই অনুমান করা বিপজ্জনক। একটি ফিল্ডে “123” লেখা থাকলে সেটি পণ্য কোড (টেক্সট) নাকি সংখ্যা (পণ্যের পরিমাণ) তা জানার উপায় নেই। তাই সরঞ্জামটি নিরাপদ পথ বেছে নেয়—সবকিছু টেক্সট রাখে।
নেস্টিং সম্ভব নয়
CSV একটি ফ্ল্যাট টেবিল। প্রতিটি সারির প্রতিটি কলামে একটি মান থাকে। তাই JSON রূপান্তরে একটি ফ্ল্যাট অবজেক্টের অ্যারে পাওয়া যায়। নেস্টেড বা হায়ারার্কিকাল JSON (যেমন একটি অবজেক্টের মধ্যে আরেকটি অবজেক্ট) তৈরি করার কোনো উপায় CSV থেকে নেই—অতিরিক্ত নিয়ম ছাড়া। এই সরঞ্জাম কোনো জটিল রূপান্তর নীতি প্রয়োগ করে না। বিপরীত দিকে, JSON থেকে CSV রূপান্তরে নেস্টেড ফিল্ড ফ্ল্যাট করতে হয়, কিন্তু এই দিকটি সরল।
বিভাজক নির্বাচন অত্যাবশ্যক
আপনাকে স্পষ্টভাবে বলে দিতে হবে আপনার CSV-তে কমা, সেমিকোলন নাকি ট্যাব ব্যবহৃত হচ্ছে। কারণ ভুল বিভাজক বাছাই করলে পার্সিং ব্যর্থ হবে। অন্য ফর্ম্যাটের পৃষ্ঠাগুলিতে (যেমন JSON বা এক্সেল ইনপুট) এই পছন্দের প্রয়োজন নেই।
এম্বেডেড কমা ও লাইন ব্রেক সংবেদনশীল
CSV-র কোঁউটিং (quoting) নিয়ম সর্বজনীনভাবে অনুসৃত হয় না। যদি কোনো সেলে কমা থাকে এবং সেটি কোটেশন চিহ্ন দিয়ে আবদ্ধ না করা হয়, তাহলে পার্সিং ভুল হবে। একইভাবে, কোটেশন চিহ্নের মধ্যে থাকা লাইন ব্রেক এবং আনএস্কেপড কোটেশন চিহ্ন এই রূপান্তরে অন্যান্য ফর্ম্যাট পরিবর্তনের চেয়ে বেশি সমস্যা তৈরি করে। এই সরঞ্জামটি স্ট্যান্ডার্ড RFC 4180-ভিত্তিক CSV পার্সিং করে, কিন্তু বাস্তব জগতের অনেক CSV ফাইল সেই মান পূরণ করে না।
ইনপুট ও আউটপুট
ইনপুট: একটি একক CSV ফাইল। যদি ব্যবহারকারী JSON বা XLSX ফাইল আপলোড করেন, তাহলে সরঞ্জামটি প্রথমে সেগুলিকে টেবিল হিসেবে ব্যাখ্যা করে, তবে পৃষ্ঠাটির প্রধান কাজ CSV → JSON।
ব্যবহারকারীর পছন্দ: আউটপুট ফরম্যাট “JSON” নির্ধারিত; CSV ইনপুট হলে CSV বিভাজক (কমা, সেমিকোলন, বা ট্যাব) নির্বাচন করতে হবে।
আউটপুট: একটি JSON ফাইল। সরঞ্জামটিতে রূপান্তরিত ডেটার একটি প্রিভিউ, টেবিলের সারি ও কলাম সংখ্যা এবং আউটপুট ফাইলের আকারও দেখানো হয়।
নিচের ছকটি বিভাজক নির্বাচনের বিকল্প দেখায়:
| বিভাজক | সাধারণ ব্যবহার |
|---|---|
| কমা (,) | বেশিরভাগ CSV ফাইল |
| সেমিকোলন (;) | কিছু ইউরোপীয় লোকেলে, যেখানে কমা দশমিক হিসেবে ব্যবহৃত হয় |
| ট্যাব (\t) | TSV (Tab-Separated Values) ফাইল |
নিয়ম ও সীমাবদ্ধতা
সরঞ্জামটির কিছু নির্দিষ্ট নিয়ম ও সীমাবদ্ধতা রয়েছে, যা ব্যর্থ হলে নির্দিষ্ট বার্তা দেখায়। নিচে সেগুলি উল্লেখ করা হলো:
- যদি CSV পার্স করা না যায় (যেমন কোটেশন ত্রুটি, অসামঞ্জস্যপূর্ণ কলাম সংখ্যা), তাহলে বার্তা: "This CSV could not be parsed."
- যদি ফাইলটিতে কোনো ডেটা সারি না থাকে: "This file has no table rows."
- সারি বা কলামের সীমা অতিক্রম করলে: "This table has more than ‹max› rows." অথবা "This table has more than ‹max› columns." (নির্দিষ্ট সংখ্যা ফ্যাক্ট শিটে নেই, তবে সরঞ্জামটি এই ধরনের বার্তা দেখায়)
- ফাইলের আকার সীমা অতিক্রম করলে: "This file is too large. Use a file under ‹max›."
- ব্যবহারকারী কোনো ফাইল নির্বাচন না করলে: "Choose one file first."
- ভুল ফাইল টাইপ দিলে: "Choose a CSV, JSON or XLSX file."
- রূপান্তর অনেক সময় নিলে: "This conversion is taking too long. Try a smaller file."
মনে রাখবেন, সরঞ্জামটি CSV-এর ভিজিবল ডেটাই পার্স করে। কোনো ফর্মুলা চালায় না (CSV-তে ফর্মুলা থাকে না), এবং ফরম্যাটিং সংরক্ষণ করে না।
কারা এটি ব্যবহার করবেন
- ডেভেলপার: যিনি ডাটাবেজ বা স্প্রেডশিট থেকে CSV এক্সপোর্ট পান এবং সেই ডেটা একটি জাভাস্ক্রিপ্ট অ্যাপ্লিকেশন বা API-তে ফিড করতে চান যা JSON আশা করে।
- ডেটা বিশ্লেষক: যিনি লিগ্যাসি CSV ঠিকানা ফাইল (যাতে লিডিং জিরো পোস্টকোড আছে) রূপান্তর করতে চান, শূন্যগুলি অক্ষত রেখে।
- দল: যেখানে অ-প্রযুক্তিগত সহকর্মী (Excel/CSV ব্যবহারকারী) এবং টেক স্ট্যাক যা JSON বোঝে, তাদের মধ্যে ডেটা শেয়ার করতে হবে, সার্ভারে সংবেদনশীল তথ্য না পাঠিয়েই।
- যে কেউ: যে কোনো সাধারণ পণ্য, পরিচিতি বা লগের তালিকা একটি ওয়েব টুলে ব্যবহারের জন্য JSON-এ রূপান্তর করতে চায়।
- ছাত্র বা গবেষক: যিনি একটি একক CSV ফাইলকে প্রোগ্রামিং অ্যাসাইনমেন্টের জন্য কাঠামোবদ্ধ ফর্ম্যাটে রূপান্তর করতে চান।
CSV থেকে JSON রূপান্তরের মূল ধারণা
CSV ফরম্যাটের মৌলিক বিষয়
CSV (Comma-Separated Values) একটি সরল টেক্সট-ভিত্তিক ফরম্যাট যেখানে প্রতিটি লাইন একটি ডেটা সারি এবং প্রতিটি লাইনের ভেতরে মানগুলি একটি নির্দিষ্ট বিভাজক দ্বারা পৃথক থাকে। বিভাজক সাধারণত কমা, কিন্তু সেমিকোলন বা ট্যাবও প্রচলিত। কোঁউটিং রুল (RFC 4180) অনুযায়ী, যদি কোনো মানের ভেতরে বিভাজক, লাইন ব্রেক বা কোটেশন চিহ্ন থাকে, তবে পুরো মানটিকে ডাবল কোটেশনের ভেতরে রাখতে হবে এবং ভেতরের কোটেশন চিহ্ন ডাবল করতে হবে (যেমন "" দিয়ে একক " প্রকাশ করা)। বাস্তবে অনেক CSV এই নিয়ম সঠিকভাবে অনুসরণ করে না, যার ফলে পার্সিং ত্রুটি হয়।
JSON কাঠামো
JSON-এ টেবুলার ডেটা সাধারণত "অবজেক্টের অ্যারে" আকারে প্রকাশ করা হয়। প্রতিটি অবজেক্টের কী-গুলি কলামের শিরোনাম, এবং মানগুলি সেই কলামের ডেটা। এই কাঠামো একে "টেবিল-আকৃতির" JSON বলে, যেখানে সব অবজেক্টের কী-গুলির সেট একই থাকে।
টাইপ সিস্টেম: টেক্সট বনাম টাইপড ভ্যালু
CSV-তে টাইপ তথ্য নেই। তাই "০০৭৮৯" একটি পোস্টকোডকে টেক্সট হিসেবেই রাখা বুদ্ধিমানের কাজ। অটোমেটিক টাইপ-কাস্টিং করলে এটি সংখ্যা ৭৮৯ হয়ে যাবে এবং লিডিং জিরো হারিয়ে যাবে। একইভাবে, "ট্রু" বা "ফলস" বুলিয়ানে রূপান্তরিত হলে স্ট্রিং-এর মান পরিবর্তিত হতে পারে। এই সরঞ্জামটি সব মান স্ট্রিং হিসেবে রাখে, যা ডেটা অখণ্ডতা রক্ষা করে।
লিডিং জিরো সংরক্ষণ
যেহেতু প্রতিটি ফিল্ড স্ট্রিং হিসেবেই JSON-এ লেখা হয়, তাই লিডিং জিরো সংরক্ষিত থাকে। তবে যদি আপনি JSON ফাইলটি পরে এমন একটি পরিবেশে লোড করেন যা অটো-টাইপিং করে (যেমন জাভাস্ক্রিপ্টের কিছু পার্সার), তাহলে জিরো হারিয়ে যেতে পারে। সরঞ্জামটি নিজে থেকে কোনো টাইপ কাস্টিং করে না।
বিভাজক নির্বাচন ও সাধারণ বিপদ
সঠিক বিভাজক নির্বাচন করা অত্যন্ত গুরুত্বপূর্ণ। ইউরোপের অনেক দেশে কমা দশমিক চিহ্ন হিসেবে ব্যবহৃত হয়, সেখানে CSV-র বিভাজক হয় সেমিকোলন। ভুল নির্বাচন করলে সারি এবং কলাম ভুলভাবে বিভক্ত হবে। এ ছাড়া কিছু ফাইলে বিভাজক মিশ্রিত থাকে—সেটি সরঞ্জামটি হ্যান্ডেল করতে পারে না।
সাধারণ ভুল ও সমাধান
কোটেশন ত্রুটি
যদি কোনো CSV ফাইলে একটি মানের ভেতরে কমা থাকে কিন্তু সেটি কোটেশনের মধ্যে না থাকে, তাহলে পার্সার মনে করবে সেটি একটি নতুন কলামের শুরু। সমাধান: নিশ্চিত করুন যে আপনার CSV ফাইল RFC 4180 মেনে চলে। যদি না পারে, তবে সরঞ্জামটি "This CSV could not be parsed." বার্তা দেখাবে।
অসামঞ্জস্যপূর্ণ কলাম সংখ্যা
যেকোনো সারিতে অন্য সারির চেয়ে বেশি বা কম কলাম থাকলে পার্সিং ব্যর্থ হবে। অধিকাংশ CSV পার্সার প্রথম সারি (হেডার) থেকে কলাম সংখ্যা নির্ধারণ করে। তাই পরবর্তী সারিতে বেশি কলাম থাকলে তা বাদ পড়তে পারে বা ত্রুটি সৃষ্টি করতে পারে। সরঞ্জামটি এমন ক্ষেত্রে "This CSV could not be parsed." দেখায়।
লাইন ব্রেকের ভিতরে সেল
কোটেশন চিহ্নের মধ্যে লাইন ব্রেক থাকলে সেটি অবশ্যই সঠিকভাবে হ্যান্ডেল করা উচিত। সরঞ্জামটি এই লাইন ব্রেককে \n হিসেবে JSON স্ট্রিংয়ে সংরক্ষণ করে। কিন্তু যদি ফাইলটি সঠিকভাবে কোটেশন না করে, তাহলে লাইন ব্রেক নতুন সারি হিসাবে গণ্য হবে।
ফাইলের আকার ও সারি সীমা
বড় ফাইলের জন্য সরঞ্জামটি লিমিট সেট করে। যদি আপনার ফাইল খুব বড় হয়, তাহলে ছোট অংশে ভাগ করে রূপান্তর করুন।
FAQ (প্রায়শ জিজ্ঞাসিত প্রশ্ন)
প্রশ্ন ১: আমার CSV-তে কিছু ফিল্ডে সংখ্যা আছে, কিন্তু JSON-এ সেগুলি টেক্সট হিসেবে রইল। আমি কীভাবে সেগুলিকে সংখ্যায় রূপান্তর করব?
উত্তর: সরঞ্জামটি স্বয়ংক্রিয় টাইপ কনভার্সন করে না। আপনি JSON ডাউনলোড করার পরে আপনার পছন্দের প্রোগ্রামিং ভাষায় (যেমন জাভাস্ক্রিপ্টের JSON.parse ও তারপর Number() ফাংশন) অথবা একটি JSON এডিটর ব্যবহার করে মানগুলিকে সংখ্যায় রূপান্তর করতে পারেন। তবে সতর্ক থাকুন: লিডিং জিরোযুক্ত পোস্টকোড বা পণ্য কোড থাকলে সেগুলি টেক্সট হিসেবেই রাখা উচিত।
প্রশ্ন ২: আমার CSV ফাইলটি পার্স করা যায়নি। কী করব? উত্তর: সম্ভাব্য কারণ: কোটেশন ত্রুটি, ভুল বিভাজক, বা অসামঞ্জস্যপূর্ণ কলাম সংখ্যা। প্রথমে নিশ্চিত করুন আপনি সঠিক বিভাজক নির্বাচন করেছেন। তারপর ফাইলটি একটি টেক্সট এডিটরে খুলে দেখুন প্রতিটি লাইনে সমান সংখ্যক বিভাজক আছে কি না। নিশ্চিত করুন যে কোনো ফিল্ডের ভেতরে কমা থাকলে সেটি ডাবল কোটেশনের ভিতরে আছে।
প্রশ্ন ৩: ফাইলটি দেখায় "This file has no table rows." কিন্তু আমার ফাইলে ডেটা আছে। উত্তর: সম্ভবত ফাইলটিতে প্রথম সারি হেডার হিসেবে বিবেচিত হচ্ছে, কিন্তু কোনো ডেটা সারি নেই। নিশ্চিত করুন যে হেডারের নিচে অন্তত একটি ডেটা সারি আছে। অথবা ফাইলটিতে শুধুমাত্র হেডার থাকলে তা স্বীকৃত হবে না।
প্রশ্ন ৪: আমি কি একাধিক CSV ফাইল একসাথে রূপান্তর করতে পারি? উত্তর: না, এই সরঞ্জামটি একবারে একটি মাত্র ফাইল গ্রহণ করে। একাধিক ফাইলের জন্য আলাদাভাবে প্রতিটি আপলোড করতে হবে।
প্রশ্ন ৫: JSON আউটপুটে কি ডেটা প্রিভিউ দেখানো হয়? উত্তর: হ্যাঁ, সরঞ্জামটি রূপান্তরিত ডেটার একটি প্রিভিউ দেখায়, সাথে টেবিলের সারি ও কলাম সংখ্যা এবং আউটপুট ফাইলের আকারও দেখানো হয়।
প্রশ্ন ৬: আমার CSV-তে সেমিকোলন বিভাজক ব্যবহার করেছি, কিন্তু সরঞ্জামটি কমা নির্বাচনে কিছু রূপান্তর করছে। কেন? উত্তর: আপনি যদি কমা নির্বাচন করেন কিন্তু ফাইলটিতে সেমিকোলন থাকে, তাহলে সারিগুলি ভুলভাবে বিভক্ত হবে এবং সম্ভবত "This CSV could not be parsed." ত্রুটি দেখাবে। সবসময় আপনার ফাইলের প্রকৃত বিভাজক নির্বাচন করুন। আপনি একটি টেক্সট এডিটরে ফাইলটি খুলে দেখতে পারেন প্রথম লাইনে কোন চিহ্নটি কলাম পৃথক করছে।