JSON থেকে CSV রূপান্তর হলো JSON ফরম্যাটের কাঠামোবদ্ধ ডেটাকে কমা-বিভাজিত মান (comma-separated values) রূপে রূপান্তরিত করা — একটি সারণী ফরম্যাট যা স্প্রেডশিট, ডেটাবেজ ও বিশ্লেষণ টুলগুলো সরাসরি ব্যবহার করতে পারে। JSON ডেটা সংরক্ষণ করে নেস্টেড অবজেক্ট ও অ্যারে হিসেবে, নির্দিষ্ট কোনো স্কিমা ছাড়া। CSV ডেটা সংরক্ষণ করে সারি ও কলামে, হেডার সারিতে ফিল্ডের নাম থাকে। API ডেটা স্প্রেডশিট ও ডেটাবেজে পৌঁছানোর পথ হলো এই রূপান্তর।
CSV (Comma-Separated Values) RFC 4180 দ্বারা সংজ্ঞায়িত। প্রতিটি লাইন একটি রেকর্ড, এবং একটি লাইনের মধ্যে ফিল্ডগুলো একটি ডিলিমিটার অক্ষর দ্বারা পৃথক করা হয়, সাধারণত কমা। ডিলিমিটার, দ্বৈত উদ্ধৃতি বা লাইন বিরতিযুক্ত ফিল্ডগুলো দ্বৈত উদ্ধৃতিতে আবদ্ধ করতে হবে, ভেতরের উদ্ধৃতিগুলো দ্বিগুণ করে এস্কেপ করতে হবে। হাতে JSON-থেকে-CSV কনভার্টার লেখার সময় এই এস্কেপিং প্রধান বাগের উৎস।
একই কী সহ একটি সমতল অবজেক্ট অ্যারে ইনপুট হলে রূপান্তর সহজ। প্রতিটি অবজেক্ট একটি সারি হয়, প্রতিটি অনন্য কী একটি কলাম হেডার হয়। নেস্টেড অবজেক্ট ও অ্যারের জন্য সমতলকরণ প্রয়োজন, এবং অবজেক্টজুড়ে অসামঞ্জস্যপূর্ণ কীগুলোর জন্য অনুপস্থিত ফিল্ড পরিচালনার কৌশল দরকার — সাধারণত কক্ষটি খালি রাখা হয়। একটি নির্ভরযোগ্য কনভার্টার এই সমস্ত প্রান্তিক ক্ষেত্র স্বয়ংক্রিয়ভাবে পরিচালনা করে।
কেন JSON থেকে CSV রূপান্তর করবেন?
API JSON ফেরত দেয়, কিন্তু স্প্রেডশিট, SQL ডেটাবেজ ও BI টুলগুলো সারণী ডেটা প্রত্যাশা করে। JSON থেকে CSV রূপান্তর করলে কাস্টম ইম্পোর্ট স্ক্রিপ্ট না লিখেই এই সিস্টেমগুলোর মধ্যে ডেটা স্থানান্তর করা যায়।
⚡
তাৎক্ষণিক ব্রাউজার রূপান্তর
আপনার JSON পেস্ট করুন এবং সঙ্গে সঙ্গে ফাইল ডাউনলোড করুন। কোনো সার্ভার আপলোড নেই, বাহ্যিক API-এর ফাইল সাইজ সীমা নেই, প্রক্রিয়াকরণ সারির জন্য অপেক্ষা নেই।
🔒
গোপনীয়তা-সংরক্ষী প্রক্রিয়াকরণ
আপনার ডেটা আপনার ব্রাউজারেই থাকে। রূপান্তর সম্পূর্ণরূপে আপনার ডিভাইসে JavaScript-এ চলে। ডেটাবেজ রপ্তানি, ব্যবহারকারীর রেকর্ড ও আর্থিক তথ্য কখনো আপনার মেশিন ছেড়ে যায় না।
🔀
একাধিক ডিলিমিটার সমর্থন
কমা, সেমিকোলন, ট্যাব বা পাইপ ডিলিমিটারের মধ্যে বেছে নিন। ইউরোপীয় লোকেল স্প্রেডশিটের জন্য সেমিকোলন ব্যবহার করুন, Unix টুলের TSV ফাইলের জন্য ট্যাব, বা পুরনো সিস্টেম ইম্পোর্টের জন্য পাইপ।
📋
কোনো অ্যাকাউন্ট প্রয়োজন নেই
পেজ খুলুন এবং রূপান্তর করুন। কোনো সাইনআপ নেই, API কী নেই, CLI ইনস্টলেশন নেই। যেকোনো আধুনিক ব্রাউজারসহ যেকোনো ডিভাইসে কাজ করে।
JSON থেকে CSV ব্যবহারের ক্ষেত্র
স্প্রেডশিটের জন্য API ডেটা রপ্তানি
REST API JSON ফেরত দেয়। পণ্য ব্যবস্থাপক ও বিশ্লেষকরা সেই ডেটা Excel বা Google Sheets-এ চান। API প্রতিক্রিয়া CSV-তে রূপান্তর করুন এবং সরাসরি যেকোনো স্প্রেডশিট অ্যাপ্লিকেশনে খুলুন।
ডেটাবেজ বাল্ক ইম্পোর্ট
PostgreSQL COPY, MySQL LOAD DATA ও SQLite .import সবই CSV গ্রহণ করে। কাস্টম ইম্পোর্ট স্ক্রিপ্ট না লিখেই দ্রুত বাল্ক লোডিংয়ের জন্য আপনার ডেটাসেটকে সারণী ফরম্যাটে রূপান্তর করুন।
ETL পাইপলাইন প্রোটোটাইপিং
ETL পাইপলাইনের মাঝারি আউটপুটগুলো কাঁচা JSON হিসেবে পরীক্ষা করা কঠিন। একটি ধাপের আউটপুট CSV-তে রূপান্তর করুন এবং পুরো পাইপলাইন সংযুক্ত করার আগে ট্রান্সফর্মগুলো যাচাই করতে স্প্রেডশিটে খুলুন।
QA টেস্ট ডেটা প্রস্তুতি
QA ইঞ্জিনিয়াররা JSON হিসেবে টেস্ট ফিক্সচার তৈরি করেন, কিন্তু অনেক টেস্ট ফ্রেমওয়ার্ক ও ডেটা-চালিত পরীক্ষার টুল প্যারামিটারাইজড টেস্ট ইনপুটের জন্য CSV গ্রহণ করে। ম্যানুয়াল পুনর্গঠন ছাড়াই ফিক্সচার CSV-তে রূপান্তর করুন।
লগ বিশ্লেষণ ও প্রতিবেদন
অ্যাপ্লিকেশন ও ক্লাউড সার্ভিস থেকে কাঠামোবদ্ধ JSON লগ Tableau, Power BI বা Looker-এর মতো BI টুলে ভিজ্যুয়ালাইজেশন ও প্রতিবেদনের জন্য CSV হিসেবে ইম্পোর্ট করা যায়।
একাডেমিক ডেটা প্রক্রিয়াকরণ
শিক্ষার্থী ও গবেষকরা যারা উন্মুক্ত ডেটা API-এর সাথে কাজ করেন তারা JSON প্রতিক্রিয়া পান। CSV-তে রূপান্তর করলে পার্সিং কোড না লিখেই R, pandas, SPSS বা Excel-এ বিশ্লেষণ করা যায়।
CSV ডিলিমিটার রেফারেন্স
ডিলিমিটার অক্ষর প্রতিটি সারির মধ্যে ফিল্ড পৃথক করে। কমা সবচেয়ে সাধারণ, তবে নির্দিষ্ট প্রেক্ষাপটে অন্য ডিলিমিটারও মানক। ভুল ডিলিমিটার বেছে নিলে ফাইল খোলার সময় ফিল্ডগুলো একত্রিত বা বিভক্ত হয়ে যায়।
ডিলিমিটার
অক্ষর
এক্সটেনশন
কখন ব্যবহার করবেন
Comma
,
.csv
Default for most spreadsheets and databases
Semicolon
;
.csv
Standard in locales where comma is a decimal separator (DE, FR, BR)
Tab
\t
.tsv
Avoids escaping when field values contain commas or semicolons
Pipe
|
.csv
Used in fixed-width legacy systems and some ETL pipelines
CSV-তে নেস্টেড JSON পরিচালনা
CSV একটি সমতল ফরম্যাট যেখানে নেস্টেড অবজেক্ট বা অ্যারে উপস্থাপনের কোনো নেটিভ উপায় নেই। আপনার JSON-এ নেস্টেড কাঠামো থাকলে কনভার্টারকে সেগুলো কলামে সমতল করতে হবে। বেশ কয়েকটি কৌশল আছে, এবং সঠিক পছন্দ নির্ভর করে CSV কীভাবে ব্যবহার করা হবে তার উপর।
ডট-নোটেশন সমতলকরণ
নেস্টেড কীগুলো ডট দিয়ে যুক্ত হয়: {"address": {"city": "ঢাকা"}} হয়ে যায় address.city কলামে, মান ঢাকা হিসেবে। এটি সবচেয়ে প্রচলিত পদ্ধতি এবং নেস্টেড ফিল্ড রেফারেন্স সমর্থনকারী টুলগুলোর সাথে ভালোভাবে কাজ করে।
অ্যারে ইন্ডেক্স কলাম
অ্যারে সংখ্যাযুক্ত কলামে প্রসারিত হয়: {"tags": [\"a\", \"b\"]} হয়ে যায় tags.0 = a, tags.1 = b। এটি সমস্ত মান সংরক্ষণ করে কিন্তু অ্যারে বড় হলে অনেক কলাম তৈরি হয়।
JSON স্ট্রিং ফলব্যাক
জটিল নেস্টেড মানগুলো CSV কক্ষে JSON স্ট্রিং হিসেবে সিরিয়ালাইজ হয়: কক্ষে কাঁচা JSON টেক্সট থাকে। এটি পুরো কাঠামো সংরক্ষণ করে কিন্তু গ্রাহককে কক্ষের মান পার্স করতে হয়।
নেস্টেড ফিল্ড উপেক্ষা করা
কিছু কনভার্টার নেস্টেড অবজেক্ট ও অ্যারে সম্পূর্ণ বাদ দেয়, শুধুমাত্র স্কেলার (স্ট্রিং, সংখ্যা, বুলিয়ান, null) ফিল্ড রাখে। এটি পরিষ্কার CSV তৈরি করে কিন্তু ডেটা হারায়। শুধুমাত্র তখন উপযোগী যখন জানেন নেস্টেড ফিল্ড দরকার নেই।
কোড উদাহরণ
প্রোগ্রামগতভাবে JSON থেকে CSV রূপান্তরের জন্য হেডার বের করা, ফিল্ড উদ্ধৃতি ও ডিলিমিটার এস্কেপিং পরিচালনা করতে হয়। বেশিরভাগ ভাষায় CSV লেখার জন্য অন্তর্নির্মিত বা স্ট্যান্ডার্ড লাইব্রেরি সমর্থন রয়েছে।
# Using jq to convert JSON array to CSV
echo '[{"name":"Alice","age":30},{"name":"Bob","age":25}]' | \
jq -r '(.[0] | keys_unsorted) as $k | $k, (.[] | [.[$k[]]] ) | @csv'
# → "name","age"
# → "Alice",30
# → "Bob",25
# Using Miller (mlr) for streaming conversion
echo '[{"name":"Alice","age":30}]' | mlr --json --ocsv cat
# → name,age
# → Alice,30
Go
package main
import (
"encoding/csv"
"encoding/json"
"fmt"
"os"
)
func main() {
jsonStr := `[{"name":"Alice","age":30},{"name":"Bob","age":25}]`
var data []map[string]interface{}
json.Unmarshal([]byte(jsonStr), &data)
w := csv.NewWriter(os.Stdout)
// Write header
headers := []string{"name", "age"}
w.Write(headers)
// Write rows
for _, row := range data {
record := make([]string, len(headers))
for i, h := range headers {
record[i] = fmt.Sprintf("%v", row[h])
}
w.Write(record)
}
w.Flush()
// → name,age
// → Alice,30
// → Bob,25
}
প্রায়শই জিজ্ঞাসিত প্রশ্ন
এই কনভার্টার কোন JSON কাঠামো প্রত্যাশা করে?
কনভার্টার অবজেক্টের JSON অ্যারে প্রত্যাশা করে, যেমন [{"name":"রাহেলা"},{"name":"করিম"}]। অ্যারের প্রতিটি অবজেক্ট আউটপুটে একটি সারি হয়, এবং অবজেক্টের কীগুলো কলাম হেডার হয়। একটি একক JSON অবজেক্ট (অ্যারেতে মোড়ানো নয়) এক-সারির টেবিল হিসেবে গণ্য হয়।
নেস্টেড অবজেক্ট ও অ্যারে কীভাবে পরিচালিত হয়?
নেস্টেড মানগুলো ডট নোটেশন ব্যবহার করে সমতল করা হয়। উদাহরণস্বরূপ, {"address":{"city":"ঢাকা"}'} address.city নামের কলাম তৈরি করে। অ্যারে ইন্ডেক্স কলামে প্রসারিত হয় (tags.0, tags.1)। এটি আউটপুট সমতল রেখে ডেটা সংরক্ষণ করে।
অবজেক্টগুলোর ভিন্ন কী থাকলে কী হয়?
কনভার্টার অ্যারের সমস্ত অবজেক্টজুড়ে সমস্ত অনন্য কী সংগ্রহ করে এবং কলাম হেডার হিসেবে ব্যবহার করে। কোনো কী নেই এমন অবজেক্ট সেই কলামের জন্য একটি খালি কক্ষ পায়। কোনো ডেটা হারায় না, এবং কলামের ক্রম অনুসরণ করে যে ক্রমে কী প্রথম দেখা যায়।
কমার পরিবর্তে সেমিকোলন বা ট্যাব ব্যবহার করতে পারি?
হ্যাঁ। টুলটি কমা, সেমিকোলন, ট্যাব ও পাইপ ডিলিমিটার সমর্থন করে। আপনার ডেটা বা লোকেল দশমিক বিভাজক হিসেবে কমা ব্যবহার করলে সেমিকোলন ব্যবহার করুন (জার্মান, ফরাসি ও ব্রাজিলিয়ান স্প্রেডশিটে সাধারণ)। Unix টুল ব্যবহারকারী TSV ফাইলের জন্য ট্যাব ব্যবহার করুন।
ডেটা কি হারায় না?
সামঞ্জস্যপূর্ণ স্কেলার মানসহ সমতল JSON অ্যারের জন্য, হ্যাঁ। আউটপুট ফাইলে একই ডেটা থাকে এবং একই JSON-এ পুনরায় রূপান্তর করা যায়। নেস্টেড কাঠামোর জন্য, সমতলকরণ ডেটার আকৃতি পরিবর্তন করে। ইন্ডেক্স কলাম বা JSON স্ট্রিং হিসেবে সিরিয়ালাইজড অ্যারে মান পুনর্গঠন করা যায়, কিন্তু রাউন্ড-ট্রিপের জন্য মূল কাঠামো জানতে হবে।
কত বড় JSON ফাইল রূপান্তর করতে পারি?
টুলটি আপনার ব্রাউজারে চলে এবং মেমোরিতে ডেটা প্রক্রিয়া করে — আধুনিক ডিভাইসে ১০–২০ MB পর্যন্ত ফাইল কোনো সমস্যা ছাড়াই রূপান্তরিত হয়। তার চেয়ে বড় ফাইলের জন্য jq, Miller বা Python-এর csv মডিউল সহ স্ক্রিপ্ট ব্যবহার করুন, যা ডেটা স্ট্রিম হিসেবে প্রক্রিয়া করে।
এই টুলে সংবেদনশীল ডেটা পেস্ট করা কি নিরাপদ?
হ্যাঁ। সমস্ত প্রক্রিয়াকরণ আপনার ব্রাউজারে JavaScript ব্যবহার করে হয়। কোনো ডেটা কোনো সার্ভারে পাঠানো হয় না। রূপান্তরের সময় আপনার ব্রাউজারের ডেভেলপার টুল খুলে নেটওয়ার্ক ট্যাব পরীক্ষা করে এটি নিশ্চিত করতে পারেন।