Python में CSV से JSON — json.dumps() गाइड

·Backend Developer·समीक्षकPriya Sharma·प्रकाशित

मुफ़्त CSV to JSON को सीधे अपने ब्राउज़र में उपयोग करें — इंस्टॉलेशन की ज़रूरत नहीं।

CSV to JSON ऑनलाइन आज़माएं →

CSV फ़ाइलें हर जगह मिलती हैं — निर्यात की गई रिपोर्ट, डेटाबेस डंप, लॉग अर्क — और देर-सबेर आपको Python में उस CSV को JSON में बदलना पड़ता है। मानक लाइब्रेरी यह कार्य दो मॉड्यूल से करती है: csv.DictReader प्रत्येक पंक्ति को Python dict में बदलता है, और json.dumps() उन dicts को JSON string में serialize करता है। बिना कोड लिखे त्वरित एकमुश्त रूपांतरण के लिए, CSV to JSON कनवर्टर ब्राउज़र में तुरंत यह काम करता है। यह गाइड पूरे programmatic approach को cover करती है: json.dump() बनाम json.dumps(), JSON को files में लिखना, dataclass serialization, CSV values के लिए type conversion, datetime और Decimal को संभालना, और orjson जैसे उच्च-प्रदर्शन विकल्प। सभी उदाहरण Python 3.10+ के लिए हैं।

  • csv.DictReader dicts की list देता है — json.dump(rows, f, indent=2) से JSON file लिखने के लिए पूरी list serialize करें।
  • json.dump() सीधे फ़ाइल ऑब्जेक्ट में लिखता है। json.dumps() स्ट्रिंग लौटाता है। सही विकल्प चुनने से अनावश्यक प्रतिलिपि से बचा जा सकता है।
  • CSV के सभी values string होते हैं। JSON में serialize करने से पहले numeric columns को explicitly बदलें (int(), float())।
  • Unicode वर्णों — accented नाम, 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 String में Serialize करें

json मॉड्यूल हर Python इंस्टॉलेशन के साथ आता है — कोई pip install आवश्यक नहीं। json.dumps(obj) एक Python ऑब्जेक्ट (dict, list, string, number, bool, या None) लेता है और वैध JSON युक्त str लौटाता है। Python dictionary JSON ऑब्जेक्ट जैसी दिखती है, लेकिन ये मूलतः भिन्न हैं: dict मेमोरी में Python डेटा संरचना है, और JSON string 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 string में बदलें
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 dictionary की कुंजियों को वर्णमाला क्रम में व्यवस्थित करता है (संस्करणों में JSON फ़ाइलों की तुलना के लिए उपयोगी), और ensure_ascii=False non-ASCII वर्णों को \uXXXX अनुक्रमों में एस्केप करने के बजाय सुरक्षित रखता है।

Python 3.10+ — sort_keys and ensure_ascii
import json

warehouse_record = {
    "sku": "WH-9031",
    "location": "मुंबई गोदाम 3",
    "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": "मुंबई गोदाम 3",
#   "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 के रूप में सहेजना। यहाँ 10 से कम पंक्तियों में संपूर्ण स्क्रिप्ट है। csv.DictReader dict का एक iterator देता है — हर row के लिए एक dict, पहली row को keys के रूप में use करते हुए। इसे list() में लपेटने से सभी पंक्तियाँ Python list में आ जाती हैं, जो JSON array में serialize होती है।

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

# चरण 1: CSV पंक्तियों को dicts की सूची में पढ़ें
with open("inventory.csv", "r", encoding="utf-8") as csv_file:
    rows = list(csv.DictReader(csv_file))

# चरण 2: सूची को 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() अधिक मेमोरी-कुशल है क्योंकि यह आउटपुट को stream करता है, न कि पहले पूरी स्ट्रिंग मेमोरी में बनाता है।

जब आपको फ़ाइल के बजाय 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 string प्राप्त करें
json_payload = json.dumps(rows, indent=2)
print(json_payload)
# [
#   {
#     "sensor_id": "TMP-4401",
#     "location": "भवन 7 - मंज़िल 2",
#     "reading": "22.4",
#     "unit": "celsius"
#   },
#   ...
# ]

एकल पंक्ति बनाम पूरा डेटासेट: यदि आप json.dumps(single_dict) कॉल करते हैं तो JSON ऑब्जेक्ट ({...}) मिलता है। यदि json.dumps(list_of_dicts) कॉल करते हैं तो JSON array ([{...}, {...}]) मिलता है। बाहरी कंटेनर का आकार इस पर निर्भर है कि आप क्या पास करते हैं। अधिकांश उपभोक्ता tabular data के लिए array की अपेक्षा करते हैं।

गैर-स्ट्रिंग मानों को संभालना — CSV से प्रकार-रूपांतरण

यह वह बात है जो पहली बार सभी को चौंकाती है: csv.DictReader प्रत्येक मान को स्ट्रिंग के रूप में लौटाता है। आपके CSV में अंक 42 dict में स्ट्रिंग "42" बन जाता है। यदि आप इसे सीधे json.dumps() से serialize करते हैं, तो आपके 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": "भवन 7 - मंज़िल 2",
#   "temperature": 22.4,
#   "humidity": 58.3,
#   "battery_pct": 87,
#   "active": true
# }

अब temperature फ्लोट है, battery_pct पूर्णांक है, और active JSON आउटपुट में बूलियन है। रूपांतरण फ़ंक्शन आपके CSV स्कीमा के लिए विशिष्ट है — CSV डेटा से प्रकार अनुमान का कोई सामान्य तरीका नहीं है, इसलिए मैं प्रत्येक CSV स्वरूप के लिए एक अलग फ़ंक्शन लिखता हूँ।

Custom Objects और Non-Standard Types की Serialization

Python का json मॉड्यूल datetime, UUID, Decimal, या custom classes को directly serialize नहीं कर सकता। इनमें से किसी पर भी json.dumps() कॉल करने पर TypeError आएगी। इसे संभालने के दो तरीके हैं।

तरीका 1: default= पैरामीटर

default= को एक function पास करें जो unknown types को serializable में बदलता है। यह फ़ंक्शन केवल उन ऑब्जेक्ट्स के लिए कॉल किया जाता है जिन्हें 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):
    """non-standard types के लिए fallback serializer।"""
    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 आएगा और डेटा की हानि का कोई संकेत नहीं मिलेगा।

तरीका 2: asdict() के साथ Dataclasses

Python dataclasses आपकी CSV पंक्तियों को उचित प्रकार परिभाषा देते हैं। dataclasses.asdict() का उपयोग करके dataclass इंस्टेंस को सादे dict में बदलें, फिर उसे 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() nested dataclasses को recursively dicts में बदलता है। यदि आपके dataclass में अन्य dataclasses की सूची है, तो पूरा वृक्ष बदल जाता है — कोई अतिरिक्त कोड आवश्यक नहीं।

json.dumps() पैरामीटर संदर्भ

json.dumps() और json.dump() द्वारा स्वीकार किए जाने वाले कीवर्ड आर्गुमेंट की पूरी सूची। दोनों फ़ंक्शन समान पैरामीटर स्वीकार करते हैं — json.dump() फ़ाइल ऑब्जेक्ट के लिए एक अतिरिक्त पहला आर्गुमेंट लेता है।

पैरामीटर
प्रकार
डिफ़ॉल्ट
विवरण
obj
Any
(आवश्यक)
serialize किया जाने वाला Python ऑब्जेक्ट — dict, list, str, int, float, bool, None
indent
int | str | None
None
इंडेंटेशन स्तर प्रति रिक्त स्थानों की संख्या (या स्ट्रिंग)। None = संक्षिप्त एकल-पंक्ति आउटपुट
sort_keys
bool
False
आउटपुट में dictionary की कुंजियों को वर्णमाला क्रम में व्यवस्थित करें
ensure_ascii
bool
True
सभी non-ASCII वर्णों को \\uXXXX के रूप में एस्केप करें। UTF-8 सीधे उत्सर्जित करने के लिए False करें
default
Callable | None
None
उन ऑब्जेक्ट्स के लिए कॉल की जाने वाली फ़ंक्शन जो normally serialize नहीं हो सकते — serializable मान लौटाएं या TypeError उठाएं
separators
tuple[str, str] | None
None
(item_separator, key_separator) को ओवरराइड करें। रिक्त स्थान रहित संक्षिप्त आउटपुट के लिए (",", ":") उपयोग करें
skipkeys
bool
False
dict की ऐसी कुंजियाँ छोड़ें जो str, int, float, bool, या None नहीं हैं, बजाय TypeError उठाने के
allow_nan
bool
True
float("nan"), float("inf"), float("-inf") की अनुमति दें। इन मानों पर ValueError उठाने के लिए False करें
cls
Type[JSONEncoder] | None
None
डिफ़ॉल्ट के स्थान पर उपयोग की जाने वाली कस्टम JSONEncoder उपवर्ग

csv.DictReader — CSV को Python Dicts में पढ़ना

csv.DictReader CSV-से-JSON पाइपलाइन का दूसरा भाग है। यह फ़ाइल ऑब्जेक्ट को लपेटता है और प्रत्येक पंक्ति के लिए एक dict उत्पन्न करता है, पहली पंक्ति को फ़ील्ड नाम के रूप में उपयोग करते हुए। csv.reader (जो सादी सूचियाँ उत्पन्न करता है) की तुलना में, DictReader कॉलम तक नामित पहुँच देता है —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 string लौटाएं।"""
    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 फ़ाइलों — accented नाम, विशेष वर्णों वाले पते, CJK पाठ — के लिए महत्वपूर्ण है। स्पष्ट एन्कोडिंग के बिना, Python सिस्टम डिफ़ॉल्ट पर वापस जाता है, जो Windows पर अक्सर cp1252 होता है और बहु-बाइट वर्णों को चुपचाप दूषित कर देता है।

json.loads() से JSON आउटपुट का सत्यापन

CSV को JSON string में बदलने के बाद, आप 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 पढ़ता है, उसे सत्यापित करता है, और 4-रिक्त-स्थान इंडेंटेशन के साथ मुद्रित करता है। आपके CSV-से-JSON रूपांतरण ने वैध आउटपुट उत्पन्न किया है, यह जाँचने के लिए उपयोगी। यदि आप 2-रिक्त-स्थान इंडेंट पसंद करते हैं या फ़िल्टरिंग चाहते हैं, तो jq उपयोग करें।

उच्च-प्रदर्शन विकल्प — orjson

अधिकांश CSV फ़ाइलों के लिए अंतर्निर्मित json मॉड्यूल ठीक काम करता है। लेकिन यदि आप लूप में हजारों पंक्तियों वाले डेटासेट संसाधित कर रहे हैं, या आपकी API को हर request पर CSV data serialize करना है, तो orjson 5–10 गुना तेज़ है। यह Rust में लिखा है, str के बजाय bytes लौटाता है, और कस्टम default= फ़ंक्शन के बिना datetime, UUID, और numpy arrays को natively serialize करता है।

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 को सिंटैक्स हाइलाइटिंग के साथ प्रस्तुत करती है — कुंजियाँ, स्ट्रिंग, संख्याएं, और बूलियन प्रत्येक को अपना रंग मिलता है।

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 फ़ाइलों के साथ काम करना

500 MB CSV फ़ाइल को list(csv.DictReader(f)) से लोड करने पर पूरा डेटासेट मेमोरी में आ जाता है, फिर json.dump() उसके ऊपर पूरी JSON स्ट्रिंग बनाता है। 50–100 MB से बड़ी फ़ाइलों के लिए, प्रवाहित दृष्टिकोण अपनाएं या NDJSON (newline-delimited 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

# स्थिर मेमोरी उपयोग के साथ 2 GB JSON फ़ाइल संसाधित करें
high_value = count_high_value_orders("all_orders.json", 500.0)
print(f"Found {high_value} orders above $500")
नोट:जब CSV 50–100 MB से अधिक हो तो NDJSON या स्ट्रीमिंग पर स्विच करें। ijson बड़ी JSON फ़ाइलें वापस पढ़ने के लिए है — लेखन पक्ष के लिए, ऊपर दिया NDJSON पैटर्न फ़ाइल आकार चाहे जो हो, मेमोरी उपयोग स्थिर रखता है।

सामान्य गलतियाँ

json.dumps() उपयोग करना और फिर फ़ाइल में अलग से लिखना

समस्या: json.dumps() एक स्ट्रिंग लौटाता है। f.write() से लिखना काम तो करता है लेकिन मेमोरी में एक अनावश्यक मध्यवर्ती स्ट्रिंग बनाता है — बड़े डेटासेट के लिए अकुशल।

समाधान: फ़ाइल ऑब्जेक्ट में सीधे लिखने के लिए json.dump(data, f) उपयोग करें। यह पहले पूरी स्ट्रिंग बनाए बिना आउटपुट stream करता है।

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 उपभोक्ताओं को विफल कर देता है।

समाधान: serialize करने से पहले int() या float() से numeric columns को explicitly बदलें।

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 वर्ण (accented नाम, 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
बड़े डेटा के लिए ~2x तेज़
pip install pandas
orjson.dumps()
bytes
✓ मूल datetime/UUID
5–10x तेज़
pip install orjson
dataclasses.asdict() + json
str
default= पैरामीटर द्वारा
आधार रेखा
नहीं (stdlib)
polars write_json()
str या फ़ाइल
✓ मूल datetime
बड़े डेटा के लिए ~3x तेज़
pip install polars

अधिकांश CSV-से-JSON रूपांतरणों के लिए, मानक लाइब्रेरी csv + json संयोजन सही विकल्प है: शून्य निर्भरता, Python के साथ उपलब्ध, सर्वत्र काम करता है। orjson तभी use करें जब profiling से पता चले कि serialization bottleneck है — large scale पर speed difference real होता है। pandas तब use करें जब JSON में बदलने से पहले data cleaning, filtering, या aggregation करनी हो। यदि आपको बिना कोड लिखे त्वरित रूपांतरण चाहिए, तो ऑनलाइन 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 dictionary को JSON स्ट्रिंग में कैसे बदलें?

json.dumps(your_dict) कॉल करें। लौटाया गया मान वैध JSON युक्त str है। पठनीय आउटपुट के लिए indent=2 जोड़ें। यदि आपके dict में non-ASCII मान हैं, तो accented अक्षरों या 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 एन्कोडिंग के साथ लेखन मोड में फ़ाइल खोलें, फिर 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 फ़ंक्शन उन objects के लिए call होता है जिन्हें json normally serialize नहीं कर सकता। 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 से प्रत्येक पंक्ति को dictionary के रूप में पढ़ें, rows को list में collect करें, और json.dump() या json.dumps() से serialize करें। कोई third-party library नहीं चाहिए। Pandas तभी useful है जब data cleaning, type inference, या project में पहले से इसका use हो।

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.