JSON থেকে CSV

JSON অবজেক্টের অ্যারে RFC 4180 CSV-তে রূপান্তর করুন। নেস্টেড অবজেক্টকে ডটেড কলামে সমতল করে, স্পার্স রেকর্ড সামলায় এবং কমা, সেমিকোলন, ট্যাব বা পাইপ ডিলিমিটারসহ Excel BOM অফার করে।

রেকর্ডগুলো স্প্রেডশিটে সমতল করুন। অবজেক্টের একটি অ্যারে পেস্ট করুন এবং হেডার সারিসহ CSV ফিরে পান। নেস্টেড অবজেক্ট ডটেড কলাম নাম হয়, অনুপস্থিত ফিল্ড খালি সেল হয়, এবং ডিলিমিটার ধারণকারী মান RFC 4180 অনুযায়ী কোট করা হয়।

গাছকে টেবিলে রূপান্তর

আকৃতির অসামঞ্জস্য

JSON একটি গাছ আর CSV একটি আয়তক্ষেত্র, তাই যেকোনো রূপান্তরকে সিদ্ধান্ত নিতে হয় গাছের যে অংশগুলো মানায় না সেগুলোর কী করবে। যে আকৃতি পরিষ্কারভাবে মানায় তা হলো সমতল অবজেক্টের অ্যারে: প্রতিটি অবজেক্ট একটি সারি আর প্রতিটি কী একটি কলাম হয়। বাকি সবকিছুর জন্য একটি নিয়ম দরকার।

নেস্টেড অবজেক্ট সহজ ক্ষেত্র। {"role": {"team": "core"}} হয়ে যায় role.team নামের একটি কলাম, যা মানটিকে ঠিকানাযোগ্য রাখে এবং বেশিরভাগ স্প্রেডশিট ইমপোর্ট উইজার্ড বুঝতে পারে। নেস্টেড অ্যারে কঠিন, কারণ এগুলো সম্প্রসারণ করলে সারির সংখ্যা বদলে যেত এবং পার্শ্ববর্তী ডেটা নীরবে দ্বিগুণ হয়ে যেত। এই কনভার্টার এগুলোকে একক সেলের ভেতরে JSON টেক্সট হিসেবে রাখে, যা প্রশ্নযোগ্যতা কমায় কিন্তু উৎসে ছিল না এমন রেকর্ড কখনো তৈরি করে না।

স্পার্স রেকর্ড ও কলামের ক্রম

বাস্তব জগতের JSON খুব কমই অভিন্ন। একটি রেকর্ডে nickname আছে, পরেরটিতে নেই; একটি ফিল্ড কোনো মাইগ্রেশন তারিখের পরেই দেখা যায়। যে কনভার্টার প্রথম অবজেক্ট থেকে কলাম নেয়, তা নীরবে বাকি সব বাদ দেবে।

এখানে কলাম তালিকা হলো প্রতিটি রেকর্ড জুড়ে প্রতিটি কী-এর মিলন, প্রথম-দেখা ক্রমে। যে রেকর্ডে ফিল্ড নেই সেটি বাদ না দিয়ে খালি সেল পায়, তাই সারির সংখ্যা সবসময় ইনপুটের দৈর্ঘ্যের সমান হয়। বর্ণানুক্রমিকের বদলে প্রথম-দেখা ক্রম বেছে নেওয়া হয়েছে কারণ এটি লেখকের উদ্দেশ্যমূলক গ্রুপিং সংরক্ষণ করে — idname ছড়িয়ে পড়ার বদলে সামনে থাকে।

কোটিং, ডিলিমিটার ও Excel

RFC 4180 অনুযায়ী একটি ফিল্ড কোট করতে হবে যদি তাতে ডিলিমিটার, ডাবল কোট বা লাইন ব্রেক থাকে, এবং এমবেডেড কোট দ্বিগুণ করে এস্কেপ করা হয়। এই টুল হেডারসহ প্রতিটি সেলেই সেই নিয়ম প্রয়োগ করে, তাই Grace, Jr.-এর মতো মান বা বহু-লাইন ঠিকানা যেকোনো অনুগত পার্সারের মধ্য দিয়ে রাউন্ড ট্রিপে টিকে থাকে।

ডিলিমিটার পছন্দ যতটা দেখায় তার চেয়ে বেশি গুরুত্বপূর্ণ। যে লোকেলে কমা দশমিক বিভাজক — মূলত মহাদেশীয় ইউরোপ — Excel সেমিকোলন আশা করে, অন্যথায় পুরো সারি কলাম A-তে পড়ে যায়। BOM বিকল্প একটি UTF-8 বাইট অর্ডার মার্ক যোগ করে, যা Windows-এর Excel-কে লিগ্যাসি কোড পেজের বদলে ফাইলটি UTF-8 হিসেবে পড়তে বলে; এটি ছাড়া অ-ASCII নাম বিকৃত হয়ে আসে। দুটি বিকল্পই ডিফল্ট পথের বাইরে রাখা হয়েছে কারণ এগুলো অন্য টুল ভাঙে, তাই শুধুমাত্র Excel-এর জন্য চালু করুন।

ওপেন-সোর্স নোট: তৃতীয়-পক্ষের কোনো লাইব্রেরি ছাড়া ভ্যানিলা JavaScript-এ বাস্তবায়িত।

FAQ

এটি কোন ইনপুট আকৃতি আশা করে?
অবজেক্টের একটি অ্যারে, যেখানে প্রতিটি অবজেক্ট একটি সারি। একটি একক অবজেক্ট গ্রহণযোগ্য এবং একটি সারি তৈরি করে, কিন্তু স্ট্রিং বা সংখ্যার অ্যারে টেবিল হতে পারে না।
নেস্টেড অবজেক্ট কীভাবে সামলানো হয়?
এগুলো ডটেড কলাম নামে সমতল হয়, তাই {"role": {"team": "core"}} হয়ে যায় role.team নামের একটি কলাম। JSON টেক্সট হিসেবে রাখতে সমতলকরণ বন্ধ করুন।
নেস্টেড অ্যারে কেন JSON হিসেবে রেখে দেওয়া হয়?
এগুলো সম্প্রসারণ করলে সারির সংখ্যা বদলে যেত এবং পার্শ্ববর্তী ফিল্ড দ্বিগুণ হয়ে যেত। একক সেলে রাখার মানে আউটপুটে ইনপুটে রেকর্ড ছিল ততগুলো সারিই সবসময় থাকে।
রেকর্ডের কী আলাদা হলে কী হয়?
হেডার হলো সব রেকর্ড জুড়ে সব কী-এর মিলন, প্রথম-দেখা ক্রমে, আর কোনো রেকর্ডে ফিল্ড না থাকলে তা খালি সেল পায়। কোনো রেকর্ড বাদ যায় না।
কখন BOM বিকল্প ব্যবহার করা উচিত?
শুধুমাত্র Windows-এর Excel-এর জন্য। বাইট অর্ডার মার্ক এটিকে ফাইলটি UTF-8 হিসেবে পড়তে বলে; এটি ছাড়া অ-ASCII অক্ষর ভুলভাবে পড়া হয়। অন্যান্য টুল BOM-কে অতিরিক্ত অক্ষর হিসেবে দেখাতে পারে।
Excel-এ আমার ফাইল এক কলামে খুলছে কেন?
Excel আপনার লোকেলের লিস্ট সেপারেটর অনুসরণ করে। যে লোকেলে কমা দশমিক চিহ্ন হিসেবে ব্যবহৃত হয় সেখানে এটি সেমিকোলন আশা করে, তাই ডিলিমিটার সেমিকোলনে পরিবর্তন করে পুনরায় খুলুন।