Python'da CSV'yi JSON'a Dönüştürme — json.dumps() Rehberi

·Backend Developer·İnceleyenPriya Sharma·Yayınlandı

Ücretsiz CSV'den JSON'a Dönüştürücü aracını doğrudan tarayıcınızda kullanın — kurulum gerektirmez.

CSV'den JSON'a Dönüştürücü Online Dene →

CSV dosyaları her yerde karşımıza çıkar — dışa aktarılan raporlar, veritabanı dökümleri, günlük ayıklamalar — ve er ya da geç Python ile CSV'yi JSON'a dönüştürmeniz gerekir. Standart kütüphane bunu iki modülle halleder: csv.DictReader her satırı Python sözlüğüne çevirirken json.dumps() bu sözlükleri JSON string'e serileştirir. Kod yazmadan hızlı bir dönüşüm için, CSV to JSON dönüştürücü bunu tarayıcıda anında yapar. Bu kılavuz programatik yolun tamamını kapsar: json.dump() ile json.dumps() arasındaki fark, JSON'u dosyaya yazma, dataclass serileştirme, CSV değerleri için tür dönüşümü, datetime ve Decimal işleme ve orjson gibi yüksek performanslı alternatifler. Tüm örnekler Python 3.10+ hedeflidir.

  • csv.DictReader bir sözlük listesi üretir — JSON dosyası yazmak için tam listeyi json.dump(rows, f, indent=2) ile serileştirin.
  • json.dump() doğrudan dosya nesnesine yazar. json.dumps() bir string döndürür. Doğru olanı seçerek gereksiz kopyadan kaçının.
  • CSV değerleri her zaman string türündedir. Sayısal sütunları JSON'a serileştirmeden önce açıkça dönüştürün (int(), float()).
  • Unicode karakterleri — aksanlı isimler, CJK metni — çıktıda korumak için json.dumps() çağrısına ensure_ascii=False geçirin.
  • CSV'den gelen datetime, UUID veya Decimal için default= parametresiyle özel bir dönüşüm fonksiyonu kullanın.
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"
  }
]
Not:Ham çıktıda quantity ve price değerlerinin JSON string olarak göründüğüne dikkat edin ("2", "49.99"). CSV'nin tür sistemi yoktur — her değer bir string'tir. Bunun nasıl düzeltileceği aşağıdaki tür dönüşümü bölümünde ele alınmaktadır.

json.dumps() — Python Sözlüğünü JSON String'e Serileştirme

json modülü her Python kurulumunda mevcuttur — pip install gerekmez. json.dumps(obj) bir Python nesnesi (dict, list, string, sayı, bool veya None) alır ve geçerli JSON içeren bir str döndürür. Python sözlüğü, JSON nesnesine benzese de temelden farklıdır: sözlük bellekteki bir Python veri yapısı, JSON string ise serileştirilmiş metindir. json.dumps() bu boşluğu kapatır.

Temel Örnek — Tek CSV Satırından JSON'a

Python 3.10+
import json

# Python dict olarak temsil edilen tek bir CSV satırı
server_entry = {
    "hostname": "web-prod-03",
    "ip_address": "10.0.12.47",
    "port": 8080,
    "region": "eu-west-1"
}

# Sözlüğü JSON string'e dönüştür
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'>

Bu kompakt, tek satırlı JSON üretir — yükler ve depolama için iyi, okumak için kötü. İnsan tarafından okunabilir çıktı için indent=2 ekleyin:

Python 3.10+ — güzel biçimlendirilmiş çıktı
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"
# }

Neredeyse her çağrıda kullandığım iki parametre daha: sort_keys=True sözlük anahtarlarını alfabetik sıralar (JSON dosyalarını sürümler arasında karşılaştırmak için idealdir) ve ensure_ascii=False ASCII olmayan karakterleri \uXXXX dizilerine kaçırmak yerine olduğu gibi korur.

Python 3.10+ — sort_keys ve ensure_ascii
import json

warehouse_record = {
    "sku": "WH-9031",
    "location": "İstanbul Depo 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": "İstanbul Depo 3",
#   "quantity": 240,
#   "sku": "WH-9031"
# }

separators parametresi hakkında kısa bir not: varsayılan değer (", ", ": ") olup virgül ve iki nokta sonrasına boşluk ekler. Mümkün olan en kompakt çıktı için (JSON'u URL parametrelerine gömerken veya API yanıtlarından bayt tasarrufu yaparken kullanışlı) separators=(",", ":") geçirin.

Not:Python sözlüğü ile JSON nesnesi yazdırıldığında neredeyse aynı görünür. Fark: json.dumps() Python True değerini JSON true'ya, None değerini null'a dönüştürür ve string'leri çift tırnak içine alır (Python tek tırnağa izin verir, JSON vermez). Geçerli JSON üretmek için her zaman json.dumps() kullanın — str() veya repr()'e güvenmeyin.

csv.DictReader'dan JSON Dosyasına — Tam İşlem Hattı

En yaygın gerçek dünya görevi, tüm bir CSV dosyasını okuyup JSON olarak kaydetmektir. İşte 10 satırın altında uçtan uca betik. csv.DictReader ilk satırı anahtar olarak kullanarak satır başına bir dict nesnesi üretir. list() ile sarmalamak tüm satırları bir Python listesine toplar; bu liste JSON dizisine serileştirilir.

Python 3.10+ — tam CSV'den JSON'a dönüşüm
import csv
import json

# Adım 1: CSV satırlarını sözlük listesine oku
with open("inventory.csv", "r", encoding="utf-8") as csv_file:
    rows = list(csv.DictReader(csv_file))

# Adım 2: Listeyi JSON dosyası olarak yaz
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")

İki open() çağrısı: biri CSV okuma, diğeri JSON yazma için. Desenin tamamı bu kadar. Burada json.dump() kullanıldığına dikkat edin (s olmadan) — doğrudan dosya tanıtıcısına yazar. json.dumps() kullanmak, daha sonra f.write() ile ayrıca yazmanız gereken bir string döndürür. json.dump() çıktıyı bellekte tam string olarak oluşturmak yerine akışla ilettiği için daha az bellek kullanır.

JSON'u bir API yüküne gömmek, stdout'a yazdırmak veya veritabanı sütununa eklemek gibi dosya yerine string olarak ihtiyaç duyduğunuzda json.dumps()'a geçin:

Python 3.10+ — CSV satırlarını JSON string olarak al
import csv
import json

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

# Dosyaya yazmak yerine JSON'u string olarak al
json_payload = json.dumps(rows, indent=2)
print(json_payload)
# [
#   {
#     "sensor_id": "TMP-4401",
#     "location": "7. Bina - 2. Kat",
#     "reading": "22.4",
#     "unit": "celsius"
#   },
#   ...
# ]

Tek satır ve tam veri kümesi karşılaştırması: json.dumps(tek_dict) çağırırsanız bir JSON nesnesi ({...}) elde edersiniz. json.dumps(dict_listesi) çağırırsanız JSON dizisi ([{...}, {...}]) alırsınız. Dış kapsayıcı şekli geçirdiğinize bağlıdır. Tablosal veriler için çoğu tüketici dizi bekler.

String Olmayan Değerleri Ele Alma — CSV'den Tür Dönüşümü

İlk kez karşılaşıldığında herkesi şaşırtan durum: csv.DictReader her değeri string olarak döndürür. CSV'nizdeki 42 sayısı, sözlükte "42" string'ine dönüşür. Bunu doğrudan json.dumps() ile serileştirirseniz JSON'unuzda "quantity": 42 yerine "quantity": "42" olur. Tür doğrulayan API'ler bunu reddeder. Değerleri açıkça dönüştürmeniz gerekir.

Python 3.10+ — CSV satırları için tür dönüşümü
import csv
import json

def coerce_types(row: dict) -> dict:
    """String değerleri uygun Python türlerine dönüştür."""
    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. Bina - 2. Kat",
#   "temperature": 22.4,
#   "humidity": 58.3,
#   "battery_pct": 87,
#   "active": true
# }

Artık JSON çıktısında temperature float, battery_pct integer ve active boolean türündedir. Dönüşüm fonksiyonu CSV şemanıza özgüdür — CSV verilerinden tür tahmin etmenin genel bir yolu yoktur, bu nedenle her CSV biçimi için ayrı bir fonksiyon yazarım.

Özel Nesneleri ve Standart Dışı Türleri Serileştirme

Python'ın json modülü datetime, UUID, Decimal veya özel sınıfları kutudan çıktığı gibi serileştiremez. Bu türlerde json.dumps() çağrısı TypeError fırlatır. Bu durumu ele almak için iki yaklaşım vardır.

Yaklaşım 1: default= Parametresi

default= parametresine bilinmeyen türleri serileştirilebilir bir şeye dönüştüren bir fonksiyon geçirin. Bu fonksiyon yalnızca JSON kodlayıcısının nasıl işleyeceğini bilmediği nesneler için çağrılır.

Python 3.10+ — datetime, UUID, Decimal için default=
import json
from datetime import datetime
from decimal import Decimal
from uuid import UUID

def json_serial(obj):
    """Standart dışı türler için yedek serileştirici."""
    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"
# }
Uyarı:default= fonksiyonunuzun sonunda tanımadığınız türler için her zaman TypeError fırlatın. Bunun yerine None döndürür veya sessizce atlarsanız çıktıda veri kaybının hiçbir göstergesi olmadan null alırsınız.

Yaklaşım 2: asdict() ile Dataclass'lar

Python dataclass'ları CSV satırlarınıza düzgün bir tür tanımı kazandırır. dataclasses.asdict() ile bir dataclass örneğini düz sözlüğe dönüştürün, ardından json.dumps()'a geçirin.

Python 3.10+ — dataclass serileştirme
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="İzmir",
    destination="İstanbul",
    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": "İzmir",
#   "destination": "İstanbul",
#   "weight_kg": 1240.5,
#   "shipped_at": "2026-03-12T08:00:00"
# }
Not:asdict() iç içe dataclass'ları özyinelemeli olarak sözlüklere dönüştürür. Dataclass'ınız başka dataclass'lardan oluşan bir liste içeriyorsa tüm ağaç dönüştürülür — ek kod gerekmez.

json.dumps() Parametre Referansı

json.dumps() ve json.dump() tarafından kabul edilen anahtar kelime argümanlarının tam listesi. Her iki fonksiyon da aynı parametreleri kabul eder — json.dump() dosya nesnesi için ek bir ilk argüman alır.

Parametre
Tür
Varsayılan
Açıklama
obj
Any
(zorunlu)
Serileştirilecek Python nesnesi — dict, list, str, int, float, bool, None
indent
int | str | None
None
Girinti düzeyi başına boşluk sayısı (veya bir dize). None = kompakt tek satır çıktı
sort_keys
bool
False
Sözlük anahtarlarını çıktıda alfabetik olarak sırala
ensure_ascii
bool
True
ASCII olmayan tüm karakterleri \\uXXXX olarak kodla. UTF-8 çıktısı için False yap
default
Callable | None
None
Varsayılan olarak serileştirilemeyen nesneler için çağrılan fonksiyon — serileştirilebilir bir değer döndür ya da TypeError fırlat
separators
tuple[str, str] | None
None
(öğe_ayırıcı, anahtar_ayırıcı) geçersiz kıl. Boşluksuz kompakt çıktı için (",", ":") kullan
skipkeys
bool
False
str, int, float, bool veya None olmayan dict anahtarlarını TypeError yerine atla
allow_nan
bool
True
float("nan"), float("inf"), float("-inf") değerlerine izin ver. Bu değerlerde ValueError için False yap
cls
Type[JSONEncoder] | None
None
Varsayılan yerine kullanılacak özel JSONEncoder alt sınıfı

csv.DictReader — CSV'yi Python Sözlüklerine Okuma

csv.DictReader CSV'den JSON'a dönüşüm hattının diğer yarısıdır. Bir dosya nesnesini sarar ve ilk satırı alan adı olarak kullanarak satır başına bir dict üretir. csv.reader (düz listeler üretir) ile karşılaştırıldığında, DictReader sütunlara adla erişim sağlar — row[3] gibi sihirli indeks kullanmanıza gerek kalmaz.

Python 3.10+ — özel ayırıcı ile DictReader
import csv
import json

# Veritabanı dışa aktarımından sekmeyle ayrılmış dosya
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"
#   }
# ]
Uyarı:csv.DictReader dosyayı tembelce okur — satırları birer birer üretir. list(reader) çağrısı tüm satırları belleğe yükler. Milyonlarca satırlık dosyalarda hepsini toplamak yerine satırları akışla işleyin.

Dosya ve API Yanıtından CSV Dönüştürme

İki üretim senaryosu: diskten CSV dosyası okuyup dönüştürme ve bir API uç noktasından CSV verisi çekme (pek çok raporlama servisi CSV döndürür). Her ikisi de uygun hata işleme gerektirir.

CSV Dosyası Oku → Dönüştür → JSON Yaz

Python 3.10+ — hata işleme ile dosya dönüşümü
import csv
import json
import sys

def csv_to_json_file(csv_path: str, json_path: str) -> int:
    """CSV dosyasını JSON'a dönüştür. Yazılan satır sayısını döndürür."""
    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'den CSV Çek → Ayrıştır → JSON

Python 3.10+ — API CSV yanıtından JSON'a
import csv
import io
import json
import urllib.request

def fetch_csv_as_json(url: str) -> str:
    """Bir URL'den CSV çek ve JSON string olarak döndür."""
    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)

# Örnek: CSV döndüren dışa aktarma uç noktası
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}")

Her iki örnekte de her dosya açma işleminde açık encoding="utf-8" kullanılmaktadır. Bu, ASCII olmayan karakter içeren CSV dosyaları için önemlidir — aksanlı isimler, özel karakterli adresler, CJK metni. Açık kodlama belirtilmezse Python, Windows'ta çoğunlukla cp1252 olan sistem varsayılanına geri döner ve çok baytlı karakterleri sessizce bozar.

json.loads() ile JSON Çıktısını Doğrulama

CSV'yi JSON string'e dönüştürdükten sonra sonucu json.loads() ile geri ayrıştırarak doğrulayabilirsiniz. Bu gidiş-dönüş, geçersiz JSON üretecek kodlama sorunlarını, bozuk kaçış dizilerini veya yanlışlıkla yapılan string birleştirmelerini yakalar. Çağrıyı try/except bloğuna sarın.

Python 3.10+ — gidiş-dönüş doğrulama
import json

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

# Geri ayrıştırarak geçerli JSON olduğunu doğrula
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

Komut Satırından CSV'yi JSON'a Dönüştürme

Terminalden hızlı dönüşümler — betik dosyasına gerek yok. Python'ın -c bayrağı satır içi kod çalıştırır; sonucu güzel biçimlendirme için python3 -m json.tool üzerinden aktarabilirsiniz.

bash — tek satır CSV'den JSON'a
python3 -c "
import csv, json, sys
rows = list(csv.DictReader(sys.stdin))
json.dump(rows, sys.stdout, indent=2)
" < inventory.csv > inventory.json
bash — CSV dosyasını aktar ve json.tool ile biçimlendir
python3 -c "import csv,json,sys; print(json.dumps(list(csv.DictReader(sys.stdin))))" < data.csv | python3 -m json.tool
bash — dönüştür ve jq ile doğrula
python3 -c "import csv,json,sys; json.dump(list(csv.DictReader(sys.stdin)),sys.stdout)" < report.csv | jq .
Not:python3 -m json.tool yerleşik JSON biçimleyicidir. Standart girdiden JSON okur, doğrular ve 4 boşluklu girinti ile yazdırır. CSV'den JSON'a dönüşümünüzün geçerli çıktı ürettiğini doğrulamak için kullanışlıdır. 2 boşluklu girinti tercih ederseniz veya filtrelemeye ihtiyaç duyarsanız jq kullanın.

Yüksek Performanslı Alternatif — orjson

Yerleşik json modülü çoğu CSV dosyası için yeterlidir. Ancak bir döngüde on binlerce satırlık veri setlerini işliyorsanız veya API'nizin her istekte CSV'den türetilmiş verileri serileştirmesi gerekiyorsa orjson 5–10 kat daha hızlıdır. Rust ile yazılmıştır, str yerine bytes döndürür ve özel bir default= fonksiyonu gerektirmeden datetime, UUID ve numpy dizilerini yerelde serileştirir.

bash — orjson kurulumu
pip install orjson
Python 3.10+ — orjson ile CSV'den JSON'a
import csv
import orjson

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

# orjson.dumps() str değil bytes döndürür
json_bytes = orjson.dumps(rows, option=orjson.OPT_INDENT_2)

with open("telemetry_events.json", "wb") as f:  # not: bytes için "wb"
    f.write(json_bytes)

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

API biraz farklıdır: orjson.dumps() bytes döndürür ve anahtar kelime argümanları yerine option= bayrakları kullanır. orjson çıktısı yazarken dosyaları ikili yazma modunda ("wb") açın. String'e ihtiyaç duyarsanız sonuçta .decode("utf-8") çağırın.

Sözdizimi Vurgulamalı Terminal Çıktısı — rich

Terminalde CSV'den JSON'a dönüşümleri hata ayıklamak, renkli çıktıyla çok daha kolay hale gelir. rich kütüphanesi JSON'u sözdizimi vurgulamasıyla görüntüler — anahtarlar, string'ler, sayılar ve boolean'lar her biri farklı renkle gösterilir.

bash — rich kurulumu
pip install rich
Python 3.10+ — rich JSON çıktısı
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)
Uyarı:rich çıktıya ANSI kaçış kodları ekler. rich biçimli çıktıyı dosyaya veya API yanıtına yazmayın — görünmez kontrol karakterleri içerecektir. rich'i yalnızca terminal görüntüleme için kullanın.

Büyük CSV Dosyalarıyla Çalışma

500 MB CSV dosyasını list(csv.DictReader(f)) ile yüklemek tüm veri setini belleğe alır, ardından json.dump() bunun üzerine tam JSON string'ini oluşturur. 50–100 MB'tan büyük dosyalarda akış yaklaşımına geçin veya NDJSON (satır sınırlı JSON) yazın — her satırda bir JSON nesnesi.

NDJSON — Satır Başına Bir JSON Nesnesi

Python 3.10+ — CSV'den NDJSON'a akışlı dönüşüm
import csv
import json

def csv_to_ndjson(csv_path: str, ndjson_path: str) -> int:
    """CSV'yi NDJSON'a dönüştür, satırları tek tek işle."""
    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")
# Her satır bağımsız bir JSON nesnesidir:
# {"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"}

Büyük JSON Girdisi için ijson ile Akışlı Okuma

Python 3.10+ — büyük JSON okumak için ijson
import ijson  # pip install ijson

def count_high_value_orders(json_path: str, threshold: float) -> int:
    """Tüm dosyayı yüklemeden belirli eşiğin üzerindeki siparişleri say."""
    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 dosyasını sabit bellek kullanımıyla işle
high_value = count_high_value_orders("all_orders.json", 500.0)
print(f"Found {high_value} orders above $500")
Not:CSV 50–100 MB'ı aştığında NDJSON'a veya akışlı işlemeye geçin. ijson büyük JSON dosyalarını okumak içindir — yazma tarafı için yukarıdaki NDJSON deseni dosya boyutundan bağımsız olarak bellek kullanımını sabit tutar.

Yaygın Hatalar

json.dumps() kullanıp ardından dosyaya ayrıca yazmak

Sorun: json.dumps() bir string döndürür. f.write() ile yazmak işe yarar ancak büyük veri setleri için savurgan olan gereksiz bir ara string oluşturur.

Çözüm: Doğrudan dosya nesnesine yazmak için json.dump(data, f) kullanın. Tam string'i önceden oluşturmadan çıktıyı akışla iletir.

Before · Python
After · Python
json_string = json.dumps(rows, indent=2)
with open("output.json", "w") as f:
    f.write(json_string)  # gereksiz ara string
with open("output.json", "w", encoding="utf-8") as f:
    json.dump(rows, f, indent=2, ensure_ascii=False)  # doğrudan yaz
CSV string değerlerini sayıya dönüştürmeyi unutmak

Sorun: csv.DictReader tüm değerleri string olarak döndürür. JSON çıktısında "quantity": 5 yerine "quantity": "5" oluşur ve bu durum türe duyarlı API tüketicilerini bozar.

Çözüm: Serileştirmeden önce sayısal sütunları int() veya float() ile açıkça dönüştürün.

Before · Python
After · Python
rows = list(csv.DictReader(f))
json.dumps(rows)
# [{"port": "8080", "workers": "4"}]  ← string, sayı değil
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}]  ← doğru integer'lar
Dosya açarken encoding='utf-8' belirtmemek

Sorun: Windows'ta varsayılan kodlama cp1252'dir. ASCII olmayan karakterler (aksanlı isimler, CJK metni) sessizce bozulur veya UnicodeDecodeError fırlatır.

Çözüm: Hem CSV okuma hem de JSON yazma için open() çağrısına her zaman encoding='utf-8' geçirin.

Before · Python
After · Python
with open("locations.csv", "r") as f:  # sistem varsayılan kodlamasını kullanır
    rows = list(csv.DictReader(f))
with open("locations.csv", "r", encoding="utf-8") as f:
    rows = list(csv.DictReader(f))
json.dumps() yerine str() veya repr() kullanmak

Sorun: str(my_dict) Python sözdizimi üretir (tek tırnak, True, None) ve geçerli JSON değildir. API'ler ve JSON ayrıştırıcıları bunu reddeder.

Çözüm: Geçerli JSON üretmek için her zaman json.dumps() kullanın. True'yu true'ya, None'ı null'a dönüştürür ve çift tırnak kullanır.

Before · Python
After · Python
output = str({"active": True, "note": None})
# "{'active': True, 'note': None}"  ← GEÇERLİ JSON DEĞİL
output = json.dumps({"active": True, "note": None})
# '{"active": true, "note": null}'  ← geçerli JSON

json.dumps() ve Alternatifleri — Hızlı Karşılaştırma

Yöntem
Çıktı
Geçerli JSON
Özel Tipler
Hız
Kurulum Gerekli
json.dumps()
str
default= parametresiyle
Temel
Hayır (stdlib)
json.dump()
dosyaya yazar
default= parametresiyle
Temel
Hayır (stdlib)
csv.DictReader + json
str veya dosya
default= parametresiyle
Temel
Hayır (stdlib)
pandas to_json()
str veya dosya
✓ datetime desteği
Büyük veriler için ~2x hızlı
pip install pandas
orjson.dumps()
bytes
✓ datetime/UUID desteği
5–10x hızlı
pip install orjson
dataclasses.asdict() + json
str
default= parametresiyle
Temel
Hayır (stdlib)
polars write_json()
str veya dosya
✓ datetime desteği
Büyük veriler için ~3x hızlı
pip install polars

Çoğu CSV'den JSON'a dönüşüm için standart kütüphane csv + json kombinasyonu doğru seçimdir: sıfır bağımlılık, Python ile birlikte gelir, her yerde çalışır. Profil çıkarma serileştirmenin bir darboğaz olduğunu gösterdiğinde orjson'a geçin — büyük ölçekte hız farkı gerçektir. pandas'ı JSON'a dönüştürmeden önce veri temizleme, filtreleme veya toplama da gerektiğinde kullanın. Kod yazmadan hızlı dönüşüm istiyorsanız çevrimiçi CSV to JSON dönüştürücü bunu anında halleder.

Sıkça Sorulan Sorular

Python'da json.dump() ile json.dumps() arasındaki fark nedir?

json.dump(obj, file), JSON çıktısını doğrudan dosya benzeri bir nesneye yazar (.write() metoduna sahip her şey). json.dumps(obj) ise JSON biçiminde bir string döndürür. Dosyaya yazarken json.dump(), günlük kaydı, bir yüke gömme ya da soket üzerinden gönderme gibi durumlarda JSON'u Python string olarak istiyorsanız json.dumps() kullanın. Her ikisi de aynı anahtar kelime argümanlarını kabul eder (indent, sort_keys, ensure_ascii, default).

Bir Python sözlüğünü JSON string'e nasıl dönüştürürüm?

json.dumps(sozlugunuz) çağırın. Dönen değer, geçerli JSON içeren bir str'dir. Okunabilir çıktı için indent=2 ekleyin. Sözlüğünüz ASCII olmayan değerler içeriyorsa, aksanlı harfler veya CJK metni gibi karakterleri korumak için ensure_ascii=False kullanın.

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
# }

Bir Python sözlük listesini JSON dosyası olarak nasıl kaydederim?

UTF-8 kodlamasıyla yazma modunda bir dosya açın, ardından json.dump(listeniz, f, indent=2, ensure_ascii=False) çağırın. Dosyaya yazarken her zaman json.dump() kullanın (json.dumps() değil) — bellekte ara bir string oluşturmadan doğrudan dosya tanıtıcısına yazar.

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() neden True'yu true'ya, None'ı null'a dönüştürür?

Python boolean'ları (True, False) ve None, geçerli JSON belirteçleri değildir. JSON spesifikasyonu küçük harfli true, false ve null kullanır. json.dumps() bu dönüşümü otomatik olarak yapar — True true olur, False false olur, None null olur. Bunları elle dönüştürmenize gerek yoktur. Tersine, json.loads() bunları Python türlerine geri eşler.

CSV verilerini JSON'a dönüştürürken datetime nesnelerini nasıl ele alırım?

json.dumps() çağrısına, datetime nesnelerini ISO 8601 string'lerine dönüştüren bir default= fonksiyonu geçirin. Bu fonksiyon, json'ın yerelde serileştiremediği her nesne için çağrılır. datetime örnekleri için obj.isoformat() döndürün, diğer durumlar için TypeError fırlatın.

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"}

CSV'yi pandas kullanmadan JSON'a dönüştürebilir miyim?

Evet. Python standart kütüphanesi ihtiyacınız olan her şeye sahiptir. Her satırı sözlük olarak okumak için csv.DictReader kullanın, satırları bir listede toplayın ve json.dump() ya da json.dumps() ile serileştirin. Üçüncü taraf kütüphane gerekmez. Pandas yalnızca veri temizleme, tür çıkarımı veya projede başka bir yerde zaten kullanıyorsanız işe yarar.

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 kodu yazmadan tek tıkla çözüm için CSV to JSON dönüştürücüyü deneyin — CSV verinizi yapıştırın ve biçimlendirilmiş JSON çıktısını hemen alın.

İlgili Araçlar

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 SharmaTeknik İnceleyici

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.