ToolDeck

Python-এ CSV থেকে JSON — json.dumps() গাইড

·Backend Developer·পর্যালোচনা করেছেনPriya Sharma·প্রকাশিত

বিনামূল্যে অনলাইন CSV থেকে JSON সরাসরি আপনার ব্রাউজারে ব্যবহার করুন — ইনস্টলের প্রয়োজন নেই।

CSV থেকে JSON অনলাইনে ব্যবহার করুন →

CSV ফাইল সর্বত্র পাওয়া যায় — রপ্তানি করা রিপোর্ট, ডেটাবেস ডাম্প, লগ এক্সট্র্যাক্ট — এবং দেরি হোক বা তাড়াতাড়ি আপনাকে Python-এ সেই CSV-কে JSON-এ রূপান্তর করতে হবে। স্ট্যান্ডার্ড লাইব্রেরি দুটি মডিউল দিয়ে এটি সামলায়: csv.DictReader প্রতিটি সারিকে Python dict-এ পরিণত করে, এবং json.dumps() সেই dict-গুলোকে JSON স্ট্রিংয়ে সিরিয়ালাইজ করে। কোড না লিখে দ্রুত এককালীন রূপান্তরের জন্য, CSV to JSON কনভার্টার ব্রাউজারে তাৎক্ষণিকভাবে কাজ করে। এই গাইড সম্পূর্ণ প্রোগ্রামাটিক পথ কভার করে: json.dump() বনাম json.dumps(), ফাইলে JSON লেখা, dataclass সিরিয়ালাইজেশন, CSV মানের টাইপ রূপান্তর, datetime ও Decimal সামলানো, এবং orjson-এর মতো উচ্চ-কার্যক্ষমতার বিকল্প। সব উদাহরণ Python 3.10+ লক্ষ্য করে।

  • csv.DictReader dict-এর একটি তালিকা তৈরি করে — সম্পূর্ণ তালিকাটি json.dump(rows, f, indent=2) দিয়ে JSON ফাইলে লিখুন।
  • json.dump() সরাসরি ফাইল অবজেক্টে লেখে। json.dumps() একটি স্ট্রিং রিটার্ন করে। সঠিকটি বেছে নিলে অপ্রয়োজনীয় কপি এড়ানো যায়।
  • CSV মান সবসময় স্ট্রিং। JSON-এ সিরিয়ালাইজ করার আগে সংখ্যাসূচক কলামগুলো স্পষ্টভাবে টাইপ-কাস্ট করুন (int(), float())।
  • আউটপুটে Unicode অক্ষর — অ্যাকসেন্টযুক্ত নাম, CJK টেক্সট — সংরক্ষণ করতে json.dumps()-এ ensure_ascii=False পাস করুন।
  • CSV থেকে datetime, UUID, বা Decimal-এর জন্য কাস্টম ফলব্যাক ফাংশন সহ default= প্যারামিটার ব্যবহার করুন।
Before · json
After · json
order_id,product,quantity,price
ORD-7291,Wireless Keyboard,2,49.99
ORD-7292,USB-C Hub,1,34.50
[
  {
    "order_id": "ORD-7291",
    "product": "Wireless Keyboard",
    "quantity": "2",
    "price": "49.99"
  },
  {
    "order_id": "ORD-7292",
    "product": "USB-C Hub",
    "quantity": "1",
    "price": "34.50"
  }
]
নোট:লক্ষ্য করুন যে quantity ও price কাঁচা আউটপুটে JSON স্ট্রিং হিসেবে দেখা যাচ্ছে ("2", "49.99")। CSV-এর কোনো টাইপ সিস্টেম নেই — প্রতিটি মান স্ট্রিং। এটি ঠিক করার বিষয়টি নিচে টাইপ রূপান্তর বিভাগে আলোচিত হয়েছে।

json.dumps() — Python Dict থেকে JSON স্ট্রিং সিরিয়ালাইজ করুন

json মডিউলটি প্রতিটি Python ইনস্টলেশনের সাথে আসে — কোনো pip install প্রয়োজন নেই। json.dumps(obj) একটি Python অবজেক্ট (dict, list, string, number, bool, বা None) নেয় এবং বৈধ JSON ধারণকারী একটি str রিটার্ন করে। একটি Python ডিকশনারি JSON অবজেক্টের মতো দেখতে হলেও, আসলে দুটো আলাদা জিনিস: dict মেমোরিতে Python-এর data structure, আর JSON স্ট্রিং হলো serialized text। এই কাজটা করতেই json.dumps() কল করুন।

সরল উদাহরণ — একটি CSV সারি থেকে JSON

Python 3.10+
import json

# Python dict হিসেবে উপস্থাপিত একটি CSV সারি
server_entry = {
    "hostname": "web-prod-03",
    "ip_address": "10.0.12.47",
    "port": 8080,
    "region": "eu-west-1"
}

# dict থেকে JSON স্ট্রিং তৈরি করুন
json_string = json.dumps(server_entry)
print(json_string)
# {"hostname": "web-prod-03", "ip_address": "10.0.12.47", "port": 8080, "region": "eu-west-1"}
print(type(json_string))
# <class 'str'>

এটি কম্প্যাক্ট, এক-লাইন JSON তৈরি করে — পেলোড ও স্টোরেজের জন্য ভালো, কিন্তু পড়ার জন্য কঠিন। মানুষের পাঠযোগ্য আউটপুট পেতে indent=2 যোগ করুন:

Python 3.10+ — pretty-printed output
import json

server_entry = {
    "hostname": "web-prod-03",
    "ip_address": "10.0.12.47",
    "port": 8080,
    "region": "eu-west-1"
}

pretty_json = json.dumps(server_entry, indent=2)
print(pretty_json)
# {
#   "hostname": "web-prod-03",
#   "ip_address": "10.0.12.47",
#   "port": 8080,
#   "region": "eu-west-1"
# }

আরও দুটি প্যারামিটার যা আমি প্রায় প্রতিটি কলে ব্যবহার করি: sort_keys=True ডিকশনারি কীগুলো বর্ণানুক্রমিকভাবে সাজায় (সংস্করণ জুড়ে JSON ফাইলের পার্থক্য দেখার জন্য চমৎকার), এবং ensure_ascii=False non-ASCII অক্ষরগুলো \uXXXX সিকোয়েন্সে এস্কেপ করার পরিবর্তে সংরক্ষণ করে।

Python 3.10+ — sort_keys and ensure_ascii
import json

warehouse_record = {
    "sku": "WH-9031",
    "location": "ঢাকা গুদাম ৩",
    "quantity": 240,
    "last_audit": "2026-03-10"
}

output = json.dumps(warehouse_record, indent=2, sort_keys=True, ensure_ascii=False)
print(output)
# {
#   "last_audit": "2026-03-10",
#   "location": "ঢাকা গুদাম ৩",
#   "quantity": 240,
#   "sku": "WH-9031"
# }

separators প্যারামিটার সম্পর্কে সংক্ষিপ্ত নোট: ডিফল্ট হলো (", ", ": ") যা কমা ও কোলনের পরে স্পেস যোগ করে। সবচেয়ে কম্প্যাক্ট আউটপুটের জন্য (URL প্যারামিটারে JSON এম্বেড করা বা API রেসপন্স থেকে বাইট কমানোর জন্য উপযোগী), পাস করুন separators=(",", ":")

নোট:Python dict এবং JSON অবজেক্ট প্রিন্ট করলে প্রায় একই দেখায়। পার্থক্য: json.dumps() Python-এর True-কে JSON true-তে, None-কে null-এ রূপান্তর করে এবং স্ট্রিংগুলো ডাবল কোটে মোড়ায় (Python একক কোট অনুমতি দেয়, JSON দেয় না)। বৈধ JSON তৈরি করতে সর্বদা json.dumps() ব্যবহার করুন — str() বা repr()-এর উপর নির্ভর করবেন না।

csv.DictReader থেকে JSON ফাইল — সম্পূর্ণ পাইপলাইন

সবচেয়ে সাধারণ বাস্তব কাজ হলো একটি সম্পূর্ণ CSV ফাইল পড়া এবং JSON হিসেবে সংরক্ষণ করা। ১০ লাইনেরও কম কোডে এখানে সম্পূর্ণ স্ক্রিপ্ট দেওয়া হলো। csv.DictReader dict অবজেক্টের একটি ইটারেটর তৈরি করে — প্রথম লাইনকে কী হিসেবে ব্যবহার করে প্রতি সারিতে একটি। এটি list()-এ মুড়িয়ে দিলে সব সারি একটি Python তালিকায় সংগ্রহ হয়, যা JSON অ্যারে হিসেবে সিরিয়ালাইজ হয়।

Python 3.10+ — full CSV to JSON conversion
import csv
import json

# ধাপ ১: CSV সারিগুলো dict-এর তালিকায় পড়ুন
with open("inventory.csv", "r", encoding="utf-8") as csv_file:
    rows = list(csv.DictReader(csv_file))

# ধাপ ২: তালিকাটি JSON ফাইল হিসেবে লিখুন
with open("inventory.json", "w", encoding="utf-8") as json_file:
    json.dump(rows, json_file, indent=2, ensure_ascii=False)

print(f"Converted {len(rows)} rows to inventory.json")

দুটি open() কল: একটি CSV পড়ার জন্য, একটি JSON লেখার জন্য। এটাই সম্পূর্ণ প্যাটার্ন। লক্ষ্য করুন এটি json.dump() ব্যবহার করে (s ছাড়া) — এটি সরাসরি ফাইল হ্যান্ডেলে লেখে। json.dumps() ব্যবহার করলে একটি স্ট্রিং রিটার্ন হতো যা তারপর আলাদাভাবে f.write() দিয়ে লিখতে হতো। json.dump() বেশি মেমোরি-দক্ষ কারণ এটি প্রথমে সম্পূর্ণ স্ট্রিং মেমোরিতে তৈরি না করে আউটপুট স্ট্রিম করে।

ফাইলের পরিবর্তে JSON স্ট্রিং হিসেবে প্রয়োজন হলে — API পেলোডে এম্বেড করার জন্য, stdout-এ প্রিন্ট করার জন্য, বা ডেটাবেস কলামে ঢোকানোর জন্য — তখন json.dumps() ব্যবহার করুন:

Python 3.10+ — CSV rows as JSON string
import csv
import json

with open("sensors.csv", "r", encoding="utf-8") as f:
    rows = list(csv.DictReader(f))

# ফাইলে না লিখে JSON স্ট্রিং হিসেবে নিন
json_payload = json.dumps(rows, indent=2)
print(json_payload)
# [
#   {
#     "sensor_id": "TMP-4401",
#     "location": "ভবন ৭ - তলা ২",
#     "reading": "22.4",
#     "unit": "celsius"
#   },
#   ...
# ]

একটি সারি বনাম সম্পূর্ণ ডেটাসেট: যদি json.dumps(single_dict) কল করেন তাহলে একটি JSON অবজেক্ট পাবেন ({...})। যদি json.dumps(list_of_dicts) কল করেন তাহলে একটি JSON অ্যারে পাবেন ([{...}, {...}])। বাইরের কন্টেইনারের আকৃতি নির্ভর করে আপনি কী পাস করছেন তার উপর। বেশিরভাগ ডাউনস্ট্রিম ব্যবহারকারী সারণিমূলক ডেটার জন্য অ্যারে প্রত্যাশা করে।

নন-স্ট্রিং মান সামলানো — CSV থেকে টাইপ রূপান্তর

এখানেই সবাই প্রথমবার আটকে যায়: csv.DictReader প্রতিটি মান স্ট্রিং হিসেবে রিটার্ন করে। আপনার CSV-এ 42 সংখ্যাটি dict-এ স্ট্রিং "42" হয়ে যায়। এটি সরাসরি json.dumps() দিয়ে সিরিয়ালাইজ করলে JSON-এ "quantity": "42" হবে "quantity": 42-এর পরিবর্তে। টাইপ যাচাইকারী API এটি প্রত্যাখ্যান করবে। মানগুলো স্পষ্টভাবে কাস্ট করতে হবে।

Python 3.10+ — type coercion for CSV rows
import csv
import json

def coerce_types(row: dict) -> dict:
    """স্ট্রিং মানগুলো উপযুক্ত Python টাইপে রূপান্তর করুন।"""
    return {
        "sensor_id": row["sensor_id"],
        "location": row["location"],
        "temperature": float(row["temperature"]),
        "humidity": float(row["humidity"]),
        "battery_pct": int(row["battery_pct"]),
        "active": row["active"].lower() == "true",
    }

with open("sensor_readings.csv", "r", encoding="utf-8") as f:
    rows = [coerce_types(row) for row in csv.DictReader(f)]

print(json.dumps(rows[0], indent=2))
# {
#   "sensor_id": "TMP-4401",
#   "location": "ভবন ৭ - তলা ২",
#   "temperature": 22.4,
#   "humidity": 58.3,
#   "battery_pct": 87,
#   "active": true
# }

এখন JSON আউটপুটে temperature একটি float, battery_pct একটি integer, এবং active একটি boolean। রূপান্তর ফাংশনটি আপনার CSV স্কিমার জন্য নির্দিষ্ট — CSV ডেটা থেকে টাইপ অনুমান করার কোনো সাধারণ উপায় নেই, তাই আমি প্রতিটি CSV ফরম্যাটের জন্য একটি ফাংশন লিখি।

কাস্টম অবজেক্ট এবং অ-মানক টাইপ সিরিয়ালাইজ করা

Python-এর json মডিউল নিজে থেকেই datetime, UUID, Decimal, বা কাস্টম ক্লাস সিরিয়ালাইজ করতে পারে না। এগুলোর যেকোনোটিতে json.dumps() কল করলে TypeError উত্থাপিত হয়। দুটি পদ্ধতি এটি সামলায়।

পদ্ধতি ১: default= প্যারামিটার

default=-এ একটি ফাংশন পাস করুন যা অজানা টাইপকে সিরিয়ালাইজযোগ্য কিছুতে রূপান্তর করে। এই ফাংশনটি কেবল সেই অবজেক্টগুলোর জন্য কল হয় যা JSON এনকোডার সামলাতে জানে না।

Python 3.10+ — default= for datetime, UUID, Decimal
import json
from datetime import datetime
from decimal import Decimal
from uuid import UUID

def json_serial(obj):
    """অ-মানক টাইপের জন্য ফলব্যাক সিরিয়ালাইজার।"""
    if isinstance(obj, datetime):
        return obj.isoformat()
    if isinstance(obj, UUID):
        return str(obj)
    if isinstance(obj, Decimal):
        return float(obj)
    raise TypeError(f"Type {type(obj).__name__} is not JSON serializable")

transaction = {
    "txn_id": UUID("a1b2c3d4-e5f6-7890-abcd-ef1234567890"),
    "amount": Decimal("149.99"),
    "currency": "EUR",
    "processed_at": datetime(2026, 3, 15, 14, 30, 0),
    "gateway": "stripe",
}

print(json.dumps(transaction, indent=2, default=json_serial))
# {
#   "txn_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
#   "amount": 149.99,
#   "currency": "EUR",
#   "processed_at": "2026-03-15T14:30:00",
#   "gateway": "stripe"
# }
সতর্কতা:আপনার default= ফাংশনের শেষে অচেনা টাইপের জন্য সর্বদা TypeError উত্থাপন করুন। যদি None রিটার্ন করেন বা নীরবে এড়িয়ে যান, তাহলে কোনো তথ্য হারানোর ইঙ্গিত ছাড়াই আউটপুটে null আসবে।

পদ্ধতি ২: asdict() সহ Dataclasses

Python dataclass আপনার CSV সারিগুলোকে একটি সঠিক টাইপ সংজ্ঞা দেয়। একটি dataclass ইন্সট্যান্সকে সাধারণ dict-এ রূপান্তর করতে dataclasses.asdict() ব্যবহার করুন, তারপর এটি json.dumps()-এ পাস করুন।

Python 3.10+ — dataclass serialization
import json
from dataclasses import dataclass, asdict
from datetime import datetime

@dataclass
class ShipmentRecord:
    tracking_id: str
    origin: str
    destination: str
    weight_kg: float
    shipped_at: datetime

def json_serial(obj):
    if isinstance(obj, datetime):
        return obj.isoformat()
    raise TypeError(f"Not serializable: {type(obj).__name__}")

shipment = ShipmentRecord(
    tracking_id="SHP-9827",
    origin="ঢাকা",
    destination="চট্টগ্রাম",
    weight_kg=1240.5,
    shipped_at=datetime(2026, 3, 12, 8, 0, 0),
)

print(json.dumps(asdict(shipment), indent=2, default=json_serial))
# {
#   "tracking_id": "SHP-9827",
#   "origin": "ঢাকা",
#   "destination": "চট্টগ্রাম",
#   "weight_kg": 1240.5,
#   "shipped_at": "2026-03-12T08:00:00"
# }
নোট:asdict() নেস্টেড dataclass-গুলোকে recursively dict-এ রূপান্তর করে। যদি আপনার dataclass-এ অন্য dataclass-এর তালিকা থাকে, পুরো গাছটি রূপান্তরিত হয় — কোনো অতিরিক্ত কোড ছাড়াই।

json.dumps() প্যারামিটার রেফারেন্স

json.dumps() এবং json.dump() দ্বারা গৃহীত কীওয়ার্ড আর্গুমেন্টের সম্পূর্ণ তালিকা। উভয় ফাংশন একই প্যারামিটার গ্রহণ করে — json.dump() ফাইল অবজেক্টের জন্য একটি অতিরিক্ত প্রথম আর্গুমেন্ট নেয়।

প্যারামিটার
ধরন
ডিফল্ট
বিবরণ
obj
Any
(আবশ্যক)
সিরিয়ালাইজ করার Python অবজেক্ট — dict, list, str, int, float, bool, None
indent
int | str | None
None
প্রতিটি ইন্ডেন্টেশন স্তরের জন্য স্থানের সংখ্যা (বা স্ট্রিং)। None = কম্প্যাক্ট এক-লাইন আউটপুট
sort_keys
bool
False
আউটপুটে ডিকশনারি কীগুলো বর্ণানুক্রমিকভাবে সাজান
ensure_ascii
bool
True
সমস্ত non-ASCII অক্ষরকে \\uXXXX হিসেবে এস্কেপ করুন। UTF-8 সরাসরি আউটপুট করতে False সেট করুন
default
Callable | None
None
ডিফল্টভাবে সিরিয়ালাইজযোগ্য নয় এমন অবজেক্টের জন্য কলব্যাক ফাংশন — একটি সিরিয়ালাইজযোগ্য মান রিটার্ন করুন বা TypeError উত্থাপন করুন
separators
tuple[str, str] | None
None
(item_separator, key_separator) ওভাররাইড করুন। স্পেসহীন কম্প্যাক্ট আউটপুটের জন্য (",", ":") ব্যবহার করুন
skipkeys
bool
False
str, int, float, bool বা None নয় এমন dict কী TypeError না তুলে এড়িয়ে যান
allow_nan
bool
True
float("nan"), float("inf"), float("-inf") অনুমতি দিন। এই মানগুলোতে ValueError উত্থাপন করতে False সেট করুন
cls
Type[JSONEncoder] | None
None
ডিফল্টের পরিবর্তে ব্যবহার করার জন্য কাস্টম JSONEncoder সাবক্লাস

csv.DictReader — CSV-কে Python Dict-এ পড়া

csv.DictReader হলো CSV-থেকে-JSON পাইপলাইনের অন্য অর্ধেক। এটি একটি ফাইল অবজেক্টকে মোড়ায় এবং প্রথম লাইনকে ফিল্ড নাম হিসেবে ব্যবহার করে প্রতি সারিতে একটি dict দেয়। সাধারণ তালিকা দেওয়া csv.reader-এর তুলনায়, DictReader column-এর নাম দিয়ে access করতে দেয় — সংখ্যার index যেমন row[3] নয়।

Python 3.10+ — DictReader with custom delimiter
import csv
import json

# ডেটাবেস এক্সপোর্ট থেকে ট্যাব-বিভক্ত ফাইল
with open("user_sessions.tsv", "r", encoding="utf-8") as f:
    reader = csv.DictReader(f, delimiter="\t")
    sessions = list(reader)

print(json.dumps(sessions[:2], indent=2))
# [
#   {
#     "session_id": "sess_8f2a91bc",
#     "user_id": "usr_4421",
#     "started_at": "2026-03-15T09:12:00Z",
#     "duration_sec": "342",
#     "pages_viewed": "7"
#   },
#   {
#     "session_id": "sess_3c7d44ef",
#     "user_id": "usr_1187",
#     "started_at": "2026-03-15T09:14:22Z",
#     "duration_sec": "128",
#     "pages_viewed": "3"
#   }
# ]
সতর্কতা:csv.DictReader সম্পূর্ণ ফাইলটি অলসভাবে পড়ে — একসময়ে একটি সারি দেয়। list(reader) কল করলে সব সারি মেমোরিতে লোড হয়। লক্ষ লক্ষ সারির ফাইলের জন্য, সব সংগ্রহ না করে স্ট্রিমিং পদ্ধতিতে সারি প্রক্রিয়া করুন।

ফাইল এবং API রেসপন্স থেকে CSV রূপান্তর করুন

দুটি প্রোডাকশন পরিস্থিতি: ডিস্ক থেকে CSV ফাইল পড়ে রূপান্তর করা, এবং একটি API এন্ডপয়েন্ট থেকে CSV ডেটা ফেচ করা (অনেক রিপোর্টিং সার্ভিস CSV রিটার্ন করে)। উভয়ের জন্যই সঠিক ত্রুটি হ্যান্ডলিং প্রয়োজন।

CSV ফাইল পড়ুন → রূপান্তর করুন → JSON লিখুন

Python 3.10+ — file conversion with error handling
import csv
import json
import sys

def csv_to_json_file(csv_path: str, json_path: str) -> int:
    """CSV ফাইলকে JSON-এ রূপান্তর করুন। লেখা সারির সংখ্যা রিটার্ন করে।"""
    try:
        with open(csv_path, "r", encoding="utf-8") as f:
            rows = list(csv.DictReader(f))
    except FileNotFoundError:
        print(f"Error: {csv_path} not found", file=sys.stderr)
        sys.exit(1)
    except csv.Error as e:
        print(f"CSV parse error in {csv_path}: {e}", file=sys.stderr)
        sys.exit(1)

    with open(json_path, "w", encoding="utf-8") as f:
        json.dump(rows, f, indent=2, ensure_ascii=False)

    return len(rows)

count = csv_to_json_file("fleet_vehicles.csv", "fleet_vehicles.json")
print(f"Wrote {count} records to fleet_vehicles.json")

API থেকে CSV ফেচ করুন → পার্স করুন → JSON

Python 3.10+ — API CSV response to JSON
import csv
import io
import json
import urllib.request

def fetch_csv_as_json(url: str) -> str:
    """URL থেকে CSV ফেচ করুন এবং JSON স্ট্রিং হিসেবে রিটার্ন করুন।"""
    try:
        with urllib.request.urlopen(url, timeout=10) as resp:
            raw = resp.read().decode("utf-8")
    except urllib.error.URLError as e:
        raise RuntimeError(f"Failed to fetch {url}: {e}")

    reader = csv.DictReader(io.StringIO(raw))
    rows = list(reader)

    if not rows:
        raise ValueError("CSV response was empty or had no data rows")

    return json.dumps(rows, indent=2, ensure_ascii=False)

# উদাহরণ: CSV রিটার্নকারী এক্সপোর্ট এন্ডপয়েন্ট
try:
    result = fetch_csv_as_json("https://reports.internal/api/v2/daily-metrics.csv")
    print(result)
except (RuntimeError, ValueError) as e:
    print(f"Error: {e}")

উভয় উদাহরণ প্রতিটি ফাইল খোলায় স্পষ্ট encoding="utf-8" ব্যবহার করে। এটি non-ASCII অক্ষর সহ CSV ফাইলের জন্য গুরুত্বপূর্ণ — অ্যাকসেন্টযুক্ত নাম, বিশেষ অক্ষর সহ ঠিকানা, CJK টেক্সট। স্পষ্ট এনকোডিং ছাড়া Python সিস্টেম ডিফল্টে ফিরে যায়, যা Windows-এ প্রায়ই cp1252 হয় এবং নীরবে মাল্টিবাইট অক্ষর নষ্ট করে দেয়।

json.loads() দিয়ে JSON আউটপুট যাচাই করা

CSV-কে JSON স্ট্রিংয়ে রূপান্তর করার পরে, ফলাফলটি json.loads() দিয়ে আবার পার্স করে যাচাই করতে পারেন। এই রাউন্ড-ট্রিপ এনকোডিং সমস্যা, ভাঙা এস্কেপ সিকোয়েন্স, বা অসাবধানতাবশত স্ট্রিং কনক্যাটিনেশন ধরে ফেলে যা অবৈধ JSON তৈরি করতে পারে। try/except ব্লকে কলটি মোড়িয়ে দিন।

Python 3.10+ — round-trip validation
import json

json_string = json.dumps({"order_id": "ORD-7291", "total": 129.99})

# আবার পার্স করে বৈধ JSON কিনা যাচাই করুন
try:
    parsed = json.loads(json_string)
    print(f"Valid JSON with {len(parsed)} keys")
except json.JSONDecodeError as e:
    print(f"Invalid JSON: {e}")
# Valid JSON with 2 keys

কমান্ড-লাইন থেকে CSV থেকে JSON রূপান্তর

টার্মিনাল থেকে দ্রুত রূপান্তর — কোনো স্ক্রিপ্ট ফাইলের প্রয়োজন নেই। Python-এর -c ফ্ল্যাগ ইনলাইন কোড চালায়, এবং সুন্দরভাবে প্রিন্ট করার জন্য ফলাফলটি python3 -m json.tool-এর মধ্য দিয়ে পাইপ করতে পারেন।

bash — one-liner CSV to JSON
python3 -c "
import csv, json, sys
rows = list(csv.DictReader(sys.stdin))
json.dump(rows, sys.stdout, indent=2)
" < inventory.csv > inventory.json
bash — pipe CSV file and format with json.tool
python3 -c "import csv,json,sys; print(json.dumps(list(csv.DictReader(sys.stdin))))" < data.csv | python3 -m json.tool
bash — convert and validate with jq
python3 -c "import csv,json,sys; json.dump(list(csv.DictReader(sys.stdin)),sys.stdout)" < report.csv | jq .
নোট:python3 -m json.tool হলো অন্তর্নির্মিত JSON ফরম্যাটার। এটি stdin থেকে JSON পড়ে, যাচাই করে এবং ৪-স্পেস ইন্ডেন্টেশন সহ প্রিন্ট করে। আপনার CSV-থেকে-JSON রূপান্তর বৈধ আউটপুট তৈরি করেছে কিনা যাচাই করতে উপযোগী। ২-স্পেস ইন্ডেন্ট পছন্দ করলে বা ফিল্টারিং দরকার হলে, এর পরিবর্তে jq ব্যবহার করুন।

উচ্চ-কার্যক্ষমতার বিকল্প — orjson

বেশিরভাগ CSV ফাইলের জন্য অন্তর্নির্মিত json মডিউল ভালোভাবে কাজ করে। কিন্তু আপনি যদি লুপে হাজার হাজার সারির ডেটাসেট প্রক্রিয়া করছেন, বা আপনার API-কে প্রতিটি অনুরোধে CSV-থেকে-প্রাপ্ত ডেটা সিরিয়ালাইজ করতে হয়, তাহলে orjson ৫–১০ গুণ দ্রুত। এটি Rust-এ লেখা, str-এর পরিবর্তে bytes রিটার্ন করে, এবং কাস্টম default= ফাংশন ছাড়াই নেটিভলি datetime, UUID, এবং numpy অ্যারে সিরিয়ালাইজ করে।

bash — install orjson
pip install orjson
Python 3.10+ — CSV to JSON with orjson
import csv
import orjson

with open("telemetry_events.csv", "r", encoding="utf-8") as f:
    rows = list(csv.DictReader(f))

# orjson.dumps() str নয়, bytes রিটার্ন করে
json_bytes = orjson.dumps(rows, option=orjson.OPT_INDENT_2)

with open("telemetry_events.json", "wb") as f:  # নোট: bytes-এর জন্য "wb"
    f.write(json_bytes)

print(f"Wrote {len(rows)} events ({len(json_bytes)} bytes)")

API সামান্য আলাদা: orjson.dumps() bytes রিটার্ন করে এবং কীওয়ার্ড আর্গুমেন্টের পরিবর্তে option= ফ্ল্যাগ ব্যবহার করে। orjson আউটপুট লেখার সময় বাইনারি রাইট মোডে ("wb") ফাইল খুলুন। স্ট্রিং প্রয়োজন হলে ফলাফলে .decode("utf-8") কল করুন।

সিনট্যাক্স হাইলাইটিং সহ টার্মিনাল আউটপুট — rich

রঙিন আউটপুট দিয়ে টার্মিনালে CSV-থেকে-JSON রূপান্তর ডিবাগ করা সহজ হয়। rich লাইব্রেরি সিনট্যাক্স হাইলাইটিং সহ JSON রেন্ডার করে — কী, স্ট্রিং, সংখ্যা এবং boolean প্রত্যেকটি আলাদা রং পায়।

bash — install rich
pip install rich
Python 3.10+ — rich JSON output
import csv
import json
from rich.console import Console
from rich.syntax import Syntax

console = Console()

with open("deployment_log.csv", "r", encoding="utf-8") as f:
    rows = list(csv.DictReader(f))

json_output = json.dumps(rows[:3], indent=2, ensure_ascii=False)
syntax = Syntax(json_output, "json", theme="monokai", line_numbers=True)
console.print(syntax)
সতর্কতা:rich আউটপুটে ANSI এস্কেপ কোড যোগ করে। rich-ফরম্যাটেড আউটপুট কোনো ফাইলে বা API রেসপন্সে লিখবেন না — এতে অদৃশ্য কন্ট্রোল অক্ষর থাকবে। rich কেবল টার্মিনাল প্রদর্শনের জন্য ব্যবহার করুন।

বড় CSV ফাইলের সাথে কাজ করা

list(csv.DictReader(f)) দিয়ে ৫০০ MB CSV ফাইল লোড করলে মেমোরিতে সম্পূর্ণ ডেটাসেট বরাদ্দ হয়, তারপর json.dump() তার উপরে সম্পূর্ণ JSON স্ট্রিং তৈরি করে। ৫০–১০০ MB-এর চেয়ে বড় ফাইলের জন্য, স্ট্রিমিং পদ্ধতিতে যান অথবা NDJSON (নিউলাইন-বিভক্ত JSON) লিখুন — প্রতি লাইনে একটি JSON অবজেক্ট।

NDJSON — প্রতি লাইনে একটি JSON অবজেক্ট

Python 3.10+ — streaming CSV to NDJSON
import csv
import json

def csv_to_ndjson(csv_path: str, ndjson_path: str) -> int:
    """CSV থেকে NDJSON-এ রূপান্তর করুন, একসময়ে একটি সারি প্রক্রিয়া করে।"""
    count = 0
    with open(csv_path, "r", encoding="utf-8") as infile, \
         open(ndjson_path, "w", encoding="utf-8") as outfile:
        for row in csv.DictReader(infile):
            outfile.write(json.dumps(row, ensure_ascii=False) + "\n")
            count += 1
    return count

rows_written = csv_to_ndjson("access_log.csv", "access_log.ndjson")
print(f"Wrote {rows_written} lines to access_log.ndjson")
# প্রতিটি লাইন একটি স্বতন্ত্র JSON অবজেক্ট:
# {"timestamp":"2026-03-15T09:12:00Z","method":"GET","path":"/api/v2/orders","status":"200"}
# {"timestamp":"2026-03-15T09:12:01Z","method":"POST","path":"/api/v2/payments","status":"201"}

বড় JSON ইনপুটের জন্য ijson দিয়ে স্ট্রিমিং

Python 3.10+ — ijson for reading large JSON
import ijson  # pip install ijson

def count_high_value_orders(json_path: str, threshold: float) -> int:
    """সম্পূর্ণ ফাইল লোড না করে একটি সীমার উপরে অর্ডার গণনা করুন।"""
    count = 0
    with open(json_path, "rb") as f:
        for item in ijson.items(f, "item"):
            if float(item.get("total", 0)) > threshold:
                count += 1
    return count

# স্থির মেমোরি ব্যবহারে ২ GB JSON ফাইল প্রক্রিয়া করুন
high_value = count_high_value_orders("all_orders.json", 500.0)
print(f"Found {high_value} orders above $500")
নোট:CSV ৫০–১০০ MB ছাড়িয়ে গেলে NDJSON বা স্ট্রিমিংয়ে যান। ijson বড় JSON ফাইল আবার পড়ার জন্য — লেখার দিক থেকে, উপরের NDJSON প্যাটার্ন ফাইলের আকার নির্বিশেষে মেমোরি ব্যবহার স্থির রাখে।

সাধারণ ভুলসমূহ

json.dumps() ব্যবহার করে তারপর আলাদাভাবে ফাইলে লেখা

সমস্যা: json.dumps() একটি স্ট্রিং রিটার্ন করে। f.write() দিয়ে লেখা কাজ করে কিন্তু মেমোরিতে একটি অপ্রয়োজনীয় মধ্যবর্তী স্ট্রিং তৈরি করে — বড় ডেটাসেটের জন্য অপচয়।

সমাধান: সরাসরি ফাইল অবজেক্টে লিখতে json.dump(data, f) ব্যবহার করুন। এটি প্রথমে সম্পূর্ণ স্ট্রিং তৈরি না করেই আউটপুট স্ট্রিম করে।

Before · Python
After · Python
json_string = json.dumps(rows, indent=2)
with open("output.json", "w") as f:
    f.write(json_string)  # unnecessary intermediate string
with open("output.json", "w", encoding="utf-8") as f:
    json.dump(rows, f, indent=2, ensure_ascii=False)  # direct write
CSV স্ট্রিং মানগুলো সংখ্যায় কাস্ট করতে ভুলে যাওয়া

সমস্যা: csv.DictReader সব মান স্ট্রিং হিসেবে রিটার্ন করে। JSON আউটপুটে "quantity": 5-এর পরিবর্তে "quantity": "5" থাকে, যা টাইপ-যাচাইকারী API ভোক্তাদের জন্য সমস্যা তৈরি করে।

সমাধান: সিরিয়ালাইজ করার আগে সংখ্যাসূচক কলামগুলো স্পষ্টভাবে int() বা float() দিয়ে কাস্ট করুন।

Before · Python
After · Python
rows = list(csv.DictReader(f))
json.dumps(rows)
# [{"port": "8080", "workers": "4"}]  ← strings, not numbers
rows = list(csv.DictReader(f))
for row in rows:
    row["port"] = int(row["port"])
    row["workers"] = int(row["workers"])
json.dumps(rows)
# [{"port": 8080, "workers": 4}]  ← proper integers
ফাইল খোলার সময় encoding='utf-8' বাদ দেওয়া

সমস্যা: Windows-এ ডিফল্ট এনকোডিং cp1252। Non-ASCII অক্ষর (অ্যাকসেন্টযুক্ত নাম, CJK টেক্সট) নীরবে নষ্ট হয়ে যায় বা UnicodeDecodeError উত্থাপিত হয়।

সমাধান: CSV পড়া এবং JSON লেখা উভয়ের জন্য open()-এ সর্বদা encoding='utf-8' পাস করুন।

Before · Python
After · Python
with open("locations.csv", "r") as f:  # uses system default encoding
    rows = list(csv.DictReader(f))
with open("locations.csv", "r", encoding="utf-8") as f:
    rows = list(csv.DictReader(f))
json.dumps()-এর পরিবর্তে str() বা repr() ব্যবহার করা

সমস্যা: str(my_dict) Python সিনট্যাক্স তৈরি করে (একক কোট, True, None) যা বৈধ JSON নয়। API এবং JSON পার্সার এটি প্রত্যাখ্যান করে।

সমাধান: বৈধ JSON তৈরি করতে সর্বদা json.dumps() ব্যবহার করুন। এটি True-কে true, None-কে null-এ রূপান্তর করে এবং ডাবল কোট ব্যবহার করে।

Before · Python
After · Python
output = str({"active": True, "note": None})
# "{'active': True, 'note': None}"  ← NOT valid JSON
output = json.dumps({"active": True, "note": None})
# '{"active": true, "note": null}'  ← valid JSON

json.dumps() বনাম বিকল্পসমূহ — দ্রুত তুলনা

পদ্ধতি
আউটপুট
বৈধ JSON
কাস্টম টাইপ
গতি
ইনস্টল প্রয়োজন
json.dumps()
str
default= প্যারামিটারের মাধ্যমে
বেসলাইন
না (stdlib)
json.dump()
ফাইলে লেখে
default= প্যারামিটারের মাধ্যমে
বেসলাইন
না (stdlib)
csv.DictReader + json
str বা ফাইল
default= প্যারামিটারের মাধ্যমে
বেসলাইন
না (stdlib)
pandas to_json()
str বা ফাইল
✓ নেটিভ datetime
বড় ডেটায় ~২গুণ দ্রুত
pip install pandas
orjson.dumps()
bytes
✓ নেটিভ datetime/UUID
৫–১০গুণ দ্রুত
pip install orjson
dataclasses.asdict() + json
str
default= প্যারামিটারের মাধ্যমে
বেসলাইন
না (stdlib)
polars write_json()
str বা ফাইল
✓ নেটিভ datetime
বড় ডেটায় ~৩গুণ দ্রুত
pip install polars

বেশিরভাগ CSV-থেকে-JSON রূপান্তরের জন্য, স্ট্যান্ডার্ড লাইব্রেরি csv + json সমন্বয়ই সঠিক পছন্দ: কোনো নির্ভরতা নেই, Python-এর সাথে আসে, সর্বত্র কাজ করে। প্রোফাইলিং দেখালে সিরিয়ালাইজেশন বাধা — বড় পরিসরে গতির পার্থক্য বাস্তব — তখন orjson ব্যবহার করুন। JSON-এ রূপান্তরের আগে ডেটা পরিষ্কার, ফিল্টার বা সমষ্টি করার প্রয়োজন হলে pandas ব্যবহার করুন। কোড না লিখে দ্রুত রূপান্তরের জন্য, অনলাইন CSV to JSON কনভার্টার তাৎক্ষণিকভাবে সামলায়।

সচরাচর জিজ্ঞাসা

Python-এ json.dump() এবং json.dumps()-এর মধ্যে পার্থক্য কী?

json.dump(obj, file) JSON আউটপুট সরাসরি একটি ফাইল-সদৃশ অবজেক্টে (যেকোনো .write() মেথড সহ কিছু) লেখে। json.dumps(obj) একটি JSON-ফরম্যাটেড স্ট্রিং রিটার্ন করে। ফাইলে লেখার সময় json.dump() ব্যবহার করুন, লগিং, পেলোডে এম্বেড করা বা সকেটের মাধ্যমে পাঠানোর জন্য JSON স্ট্রিং প্রয়োজন হলে json.dumps() ব্যবহার করুন। উভয় ফাংশন একই কীওয়ার্ড আর্গুমেন্ট গ্রহণ করে (indent, sort_keys, ensure_ascii, default)।

Python ডিকশনারিকে JSON স্ট্রিংয়ে কীভাবে রূপান্তর করব?

json.dumps(your_dict) কল করুন। রিটার্ন মান হলো বৈধ JSON ধারণকারী একটি str। পাঠযোগ্য আউটপুটের জন্য indent=2 যোগ করুন। যদি ডিকশনারিতে non-ASCII মান থাকে, তাহলে অ্যাকসেন্টযুক্ত অক্ষর বা CJK টেক্সটের মতো অক্ষর সংরক্ষণ করতে ensure_ascii=False পাস করুন।

Python 3.10+
import json

server_config = {"host": "api.internal", "port": 8443, "debug": False}
json_string = json.dumps(server_config, indent=2)
print(json_string)
# {
#   "host": "api.internal",
#   "port": 8443,
#   "debug": false
# }

Python-এর dict-এর তালিকাকে JSON ফাইল হিসেবে কীভাবে সংরক্ষণ করব?

UTF-8 এনকোডিং সহ write মোডে একটি ফাইল খুলুন, তারপর json.dump(your_list, f, indent=2, ensure_ascii=False) কল করুন। ফাইল আউটপুটের জন্য সর্বদা json.dump() ব্যবহার করুন (json.dumps() নয়) — এটি মেমোরিতে মধ্যবর্তী স্ট্রিং তৈরি না করেই সরাসরি ফাইল হ্যান্ডেলে লেখে।

Python 3.10+
import json

records = [
    {"order_id": "ORD-4821", "total": 129.99, "currency": "USD"},
    {"order_id": "ORD-4822", "total": 89.50, "currency": "EUR"},
]

with open("orders.json", "w", encoding="utf-8") as f:
    json.dump(records, f, indent=2, ensure_ascii=False)

কেন json.dumps() True-কে true এবং None-কে null-এ পরিণত করে?

Python বুলিয়ান (True, False) এবং None বৈধ JSON টোকেন নয়। JSON স্পেসিফিকেশন ছোট হাতের true, false এবং null ব্যবহার করে। json.dumps() এই রূপান্তর স্বয়ংক্রিয়ভাবে পরিচালনা করে — True হয় true, False হয় false, None হয় null। এগুলো ম্যানুয়ালি রূপান্তর করার প্রয়োজন নেই। বিপরীত দিকে, json.loads() এগুলোকে Python টাইপে ম্যাপ করে ফিরিয়ে দেয়।

CSV ডেটা JSON-এ রূপান্তর করার সময় datetime অবজেক্ট কীভাবে সামলাবো?

json.dumps()-এ একটি default= ফাংশন পাস করুন যা datetime অবজেক্টকে ISO 8601 স্ট্রিংয়ে রূপান্তর করে। default ফাংশন যেকোনো অবজেক্টের জন্য কল হয় যা json নেটিভলি সিরিয়ালাইজ করতে পারে না। datetime ইন্সট্যান্সের জন্য obj.isoformat() রিটার্ন করুন এবং অন্য সবকিছুর জন্য TypeError উত্থাপন করুন।

Python 3.10+
import json
from datetime import datetime

def json_default(obj):
    if isinstance(obj, datetime):
        return obj.isoformat()
    raise TypeError(f"Not serializable: {type(obj)}")

event = {"action": "login", "timestamp": datetime(2026, 3, 15, 9, 30, 0)}
print(json.dumps(event, default=json_default))
# {"action": "login", "timestamp": "2026-03-15T09:30:00"}

pandas ছাড়া কি CSV থেকে JSON-এ রূপান্তর করা সম্ভব?

হ্যাঁ। Python স্ট্যান্ডার্ড লাইব্রেরিতেই সব প্রয়োজনীয় সরঞ্জাম রয়েছে। প্রতিটি সারি ডিকশনারি হিসেবে পড়তে csv.DictReader ব্যবহার করুন, সারিগুলো একটি তালিকায় সংগ্রহ করুন এবং json.dump() বা json.dumps() দিয়ে সিরিয়ালাইজ করুন। কোনো তৃতীয়-পক্ষ লাইব্রেরির প্রয়োজন নেই। pandas কেবল তখনই যুক্ত করার মূল্য আছে যখন আপনার ডেটা পরিষ্কার করা, টাইপ অনুমান বা প্রকল্পের অন্য জায়গায় ইতিমধ্যে ব্যবহার করার প্রয়োজন হয়।

Python 3.10+
import csv
import json

with open("inventory.csv", "r", encoding="utf-8") as csv_file:
    rows = list(csv.DictReader(csv_file))

with open("inventory.json", "w", encoding="utf-8") as json_file:
    json.dump(rows, json_file, indent=2, ensure_ascii=False)

কোনো Python না লিখে এক-ক্লিকে বিকল্প পেতে, CSV to JSON কনভার্টার ব্যবহার করুন — আপনার CSV ডেটা পেস্ট করুন এবং তাৎক্ষণিকভাবে ফরম্যাটেড JSON আউটপুট পান।

সংশ্লিষ্ট সরঞ্জাম

MS
Maria SantosBackend Developer

Maria is a backend developer specialising in Python and API integration. She has broad experience with data pipelines, serialisation formats, and building reliable server-side services. She is an active member of the Python community and enjoys writing practical, example-driven guides that help developers solve real problems without unnecessary theory.

PS
Priya Sharmaপ্রযুক্তিগত পর্যালোচক

Priya is a data scientist and machine learning engineer who has worked across the full Python data stack — from raw data ingestion and cleaning to model deployment and monitoring. She is passionate about reproducible research, Jupyter-based workflows, and the practical engineering side of ML. She writes about NumPy, Pandas, data serialisation, and the Python patterns that make data pipelines reliable at scale.