Python में CSV से JSON — json.dumps() गाइड
मुफ़्त 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= पैरामीटर उपयोग करें।
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"
}
]"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
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 जोड़ें:
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 अनुक्रमों में एस्केप करने के बजाय सुरक्षित रखता है।
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=(",", ":") पास करें।
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 होती है।
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() पर स्विच करें:
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 इसे अस्वीकार करेंगे। मानों को स्पष्ट रूप से बदलना आवश्यक है।
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 एन्कोडर संभालना नहीं जानता।
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() में पास करें।
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() फ़ाइल ऑब्जेक्ट के लिए एक अतिरिक्त पहला आर्गुमेंट लेता है।
csv.DictReader — CSV को Python Dicts में पढ़ना
csv.DictReader CSV-से-JSON पाइपलाइन का दूसरा भाग है। यह फ़ाइल ऑब्जेक्ट को लपेटता है और प्रत्येक पंक्ति के लिए एक dict उत्पन्न करता है, पहली पंक्ति को फ़ील्ड नाम के रूप में उपयोग करते हुए। csv.reader (जो सादी सूचियाँ उत्पन्न करता है) की तुलना में, DictReader कॉलम तक नामित पहुँच देता है —row[3] जैसे अस्पष्ट इंडेक्स नहीं।
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 लिखें
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
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 ब्लॉक में लपेटें।
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 से पाइप कर सकते हैं।
python3 -c " import csv, json, sys rows = list(csv.DictReader(sys.stdin)) json.dump(rows, sys.stdout, indent=2) " < inventory.csv > inventory.json
python3 -c "import csv,json,sys; print(json.dumps(list(csv.DictReader(sys.stdin))))" < data.csv | python3 -m json.tool
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 करता है।
pip install 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 को सिंटैक्स हाइलाइटिंग के साथ प्रस्तुत करती है — कुंजियाँ, स्ट्रिंग, संख्याएं, और बूलियन प्रत्येक को अपना रंग मिलता है।
pip install rich
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 ऑब्जेक्ट
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 से स्ट्रीमिंग
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")ijson बड़ी JSON फ़ाइलें वापस पढ़ने के लिए है — लेखन पक्ष के लिए, ऊपर दिया NDJSON पैटर्न फ़ाइल आकार चाहे जो हो, मेमोरी उपयोग स्थिर रखता है।सामान्य गलतियाँ
समस्या: json.dumps() एक स्ट्रिंग लौटाता है। f.write() से लिखना काम तो करता है लेकिन मेमोरी में एक अनावश्यक मध्यवर्ती स्ट्रिंग बनाता है — बड़े डेटासेट के लिए अकुशल।
समाधान: फ़ाइल ऑब्जेक्ट में सीधे लिखने के लिए json.dump(data, f) उपयोग करें। यह पहले पूरी स्ट्रिंग बनाए बिना आउटपुट stream करता है।
json_string = json.dumps(rows, indent=2)
with open("output.json", "w") as f:
f.write(json_string) # unnecessary intermediate stringwith open("output.json", "w", encoding="utf-8") as f:
json.dump(rows, f, indent=2, ensure_ascii=False) # direct writeसमस्या: csv.DictReader सभी मान स्ट्रिंग के रूप में लौटाता है। JSON आउटपुट में "quantity": 5 के बजाय "quantity": "5" आता है, जो प्रकार-सत्यापन करने वाले API उपभोक्ताओं को विफल कर देता है।
समाधान: serialize करने से पहले int() या float() से numeric columns को explicitly बदलें।
rows = list(csv.DictReader(f))
json.dumps(rows)
# [{"port": "8080", "workers": "4"}] ← strings, not numbersrows = 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समस्या: Windows पर डिफ़ॉल्ट एन्कोडिंग cp1252 है। Non-ASCII वर्ण (accented नाम, CJK पाठ) चुपचाप दूषित हो जाते हैं या UnicodeDecodeError उठती है।
समाधान: CSV पढ़ने और JSON लिखने दोनों के लिए open() में हमेशा encoding='utf-8' पास करें।
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))समस्या: str(my_dict) Python सिंटैक्स (एकल उद्धरण, True, None) उत्पन्न करता है जो वैध JSON नहीं है। API और JSON पार्सर इसे अस्वीकार करते हैं।
समाधान: वैध JSON उत्पन्न करने के लिए हमेशा json.dumps() उपयोग करें। यह True को true, None को null में बदलता है, और दोहरे उद्धरण उपयोग करता है।
output = str({"active": True, "note": None})
# "{'active': True, 'note': None}" ← NOT valid JSONoutput = json.dumps({"active": True, "note": None})
# '{"active": true, "note": null}' ← valid JSONjson.dumps() बनाम विकल्प — त्वरित तुलना
अधिकांश 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 पास करें।
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() नहीं) उपयोग करें — यह मेमोरी में मध्यवर्ती स्ट्रिंग बनाए बिना सीधे फ़ाइल हैंडल में लिखता है।
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 उठाएं।
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 हो।
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 आउटपुट प्राप्त करें।
संबंधित उपकरण
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.
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.