Převod CSV na JSON v Pythonu — průvodce json.dumps()
Používejte bezplatný CSV to JSON přímo v prohlížeči — bez instalace.
Vyzkoušet CSV to JSON online →CSV soubory se vyskytují všude — exportované přehledy, výpisy z databáze, extrakty logů — a dříve nebo později potřebujete převést CSV na JSON v Pythonu. Standardní knihovna to zvládá pomocí dvou modulů: csv.DictReader převede každý řádek na Python dict a json.dumps() serializuje tyto dicts na JSON řetězec. Pro rychlou jednorázovou konverzi bez kódu,konvertor CSV na JSON to zvládne okamžitě v prohlížeči. Tento průvodce pokrývá celou programovou cestu: json.dump() vs json.dumps(), zápis JSON do souborů, serializaci dataclass, přetypování hodnot z CSV, práci s datetime a Decimal a výkonné alternativy jako orjson. Všechny příklady cílí na Python 3.10+.
- ✓csv.DictReader vytváří seznam dictů — serializujte celý seznam pomocí json.dump(rows, f, indent=2) pro zápis JSON souboru.
- ✓json.dump() zapisuje přímo do souborového objektu. json.dumps() vrátí řetězec. Vyberte správnou variantu a vyhnete se zbytečné kopii dat.
- ✓Hodnoty CSV jsou vždy řetězce. Přetypujte číselné sloupce explicitně (int(), float()) před serializací na JSON.
- ✓Předejte ensure_ascii=False do json.dumps() pro zachování Unicode znaků — jména s diakritikou, CJK text — ve výstupu.
- ✓Pro datetime, UUID nebo Decimal z CSV použijte parametr default= s vlastní záložní funkcí.
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 nemá typový systém — každá hodnota je řetězec. Jak to napravit je popsáno v sekci o přetypování níže.json.dumps() — Serializace Python Dict na JSON řetězec
Modul json je součástí každé instalace Pythonu — není potřeba pip install. json.dumps(obj) přijme Python objekt (dict, list, řetězec, číslo, bool nebo None) a vrátí str obsahující platný JSON. Python slovník vypadá podobně jako JSON objekt, ale jsou to fundamentálně odlišné věci: dict je datová struktura Pythonu v paměti, a JSON řetězec je serializovaný text. Volání json.dumps() tento rozdíl překlenuje.
Minimální příklad — Jeden CSV řádek jako JSON
import json
# Jeden CSV řádek reprezentovaný jako Python dict
server_entry = {
"hostname": "web-prod-03",
"ip_address": "10.0.12.47",
"port": 8080,
"region": "eu-west-1"
}
# Převod dict na JSON řetězec
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'>Výsledkem je kompaktní jednořádkový JSON — vhodný pro payloady a ukládání, ale špatně čitelný. Přidejte indent=2 pro čitelný výstup:
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"
# }Dva další parametry, které používám téměř při každém volání: sort_keys=True seřadí klíče slovníku abecedně (skvělé pro porovnávání JSON souborů napříč verzemi) a ensure_ascii=False zachová ne-ASCII znaky místo jejich escapování na sekvence \uXXXX.
import json
warehouse_record = {
"sku": "WH-9031",
"location": "Sklad Praha 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": "Sklad Praha 3",
# "quantity": 240,
# "sku": "WH-9031"
# }Krátká poznámka k parametru separators: výchozí hodnota je (", ", ": ") která přidává mezery za čárky a dvojtečky. Pro nejkompaktnější možný výstup (užitečné při vkládání JSON do URL parametrů nebo úspoře bajtů v API odpovědích), předejte separators=(",", ":").
json.dumps() převede Python True na JSON true, None na null a obalí řetězce do dvojitých uvozovek (Python povoluje jednoduché uvozovky, JSON ne). Vždy používejte json.dumps() pro produkci platného JSON — nespoléhejte se na str() ani repr().csv.DictReader do JSON souboru — Celý postup
Nejběžnější reálný úkol je přečíst celý CSV soubor a uložit ho jako JSON. Zde je celý skript na méně než 10 řádcích. csv.DictReader vytváří iterátor objektů dict — jeden na řádek, přičemž první řádek slouží jako klíče. Zabalením do list() shromáždíte všechny řádky do Python seznamu, který se serializuje na JSON pole.
import csv
import json
# Krok 1: Načtení CSV řádků do seznamu dictů
with open("inventory.csv", "r", encoding="utf-8") as csv_file:
rows = list(csv.DictReader(csv_file))
# Krok 2: Zápis seznamu jako JSON soubor
with open("inventory.json", "w", encoding="utf-8") as json_file:
json.dump(rows, json_file, indent=2, ensure_ascii=False)
print(f"Převedeno {len(rows)} řádků do inventory.json")Dvě volání open(): jedno pro čtení CSV, jedno pro zápis JSON. To je celý vzor. Všimněte si, že se zde používá json.dump() (bez s) — zapisuje přímo do souborového objektu. Použití json.dumps() by vrátilo řetězec, který byste pak museli zapsat zvlášť pomocí f.write(). json.dump() je paměťově efektivnější, protože streamuje výstup místo sestavování celého řetězce v paměti předem.
Pokud potřebujete JSON jako řetězec místo souboru — pro vložení do API payloadu, výpis na stdout nebo uložení do sloupce databáze — přepněte na json.dumps():
import csv
import json
with open("sensors.csv", "r", encoding="utf-8") as f:
rows = list(csv.DictReader(f))
# Získání JSON jako řetězec místo zápisu do souboru
json_payload = json.dumps(rows, indent=2)
print(json_payload)
# [
# {
# "sensor_id": "TMP-4401",
# "location": "Budova 7 - Patro 2",
# "reading": "22.4",
# "unit": "celsius"
# },
# ...
# ]Jeden řádek vs. celá datová sada: pokud zavoláte json.dumps(single_dict) dostanete JSON objekt ({...}). Zavolejte json.dumps(list_of_dicts) a dostanete JSON pole ([{...}, {...}]). Tvar vnějšího kontejneru závisí na tom, co předáte. Většina konzumentů dat očekává pole pro tabulková data.
Práce s neřetězcovými hodnotami — Přetypování z CSV
Zde je věc, která překvapí každého napoprvé: csv.DictReader vrací každou hodnotu jako řetězec. Číslo 42 ve vašem CSV se stane řetězcem "42" v dictu. Pokud to serializujete přímo pomocí json.dumps(), váš JSON bude mít "quantity": "42" místo "quantity": 42. API, která ověřují typy, to odmítnou. Musíte explicitně přetypovat hodnoty.
import csv
import json
def coerce_types(row: dict) -> dict:
"""Převede řetězcové hodnoty na odpovídající Python typy."""
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": "Budova 7 - Patro 2",
# "temperature": 22.4,
# "humidity": 58.3,
# "battery_pct": 87,
# "active": true
# }Nyní je temperature desetinné číslo, battery_pct je celé číslo a active je boolean v JSON výstupu. Funkce pro přetypování je specifická pro schéma vašeho CSV — neexistuje obecný způsob jak odhadnout typy z CSV dat, proto píši jednu funkci pro každý formát CSV.
Serializace vlastních objektů a nestandardních typů
Python modul json neumí serializovat datetime, UUID, Decimal, ani vlastní třídy přímo. Volání json.dumps() na kterýkoliv z těchto typů vyvolá TypeError. Existují dva přístupy, jak to řešit.
Přístup 1: Parametr default=
Předejte funkci do default= která převede neznámé typy na něco serializovatelného. Tato funkce je volána pouze pro objekty, které JSON kodér neumí zpracovat.
import json
from datetime import datetime
from decimal import Decimal
from uuid import UUID
def json_serial(obj):
"""Záložní serializátor pro nestandardní typy."""
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"
# }TypeError na konci vaší funkce default= pro nerozpoznané typy. Pokud vrátíte None nebo je tiše přeskočíte, dostanete ve výstupu null bez jakéhokoliv upozornění, že data byla ztracena.Přístup 2: Dataclasses s asdict()
Python dataclasses dávají vašim CSV řádkům správnou definici typů. Použijte dataclasses.asdict() pro převod instance dataclass na prostý dict, pak ho předejte do 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="Praha",
destination="Brno",
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": "Praha",
# "destination": "Brno",
# "weight_kg": 1240.5,
# "shipped_at": "2026-03-12T08:00:00"
# }asdict() rekurzivně převádí vnořené dataclasses na dicts. Pokud váš dataclass obsahuje seznam dalších dataclasses, celý strom se převede — bez potřeby dalšího kódu.Referenční tabulka parametrů json.dumps()
Úplný seznam pojmenovaných argumentů přijímaných funkcemi json.dumps() a json.dump(). Obě funkce přijímají stejné parametry — json.dump() navíc přijímá jako první argument souborový objekt.
csv.DictReader — Čtení CSV do Python dictů
csv.DictReader je druhou polovinou procesu převodu CSV na JSON. Obaluje souborový objekt a vrací jeden dict na řádek, přičemž první řádek slouží jako názvy polí. Ve srovnání s csv.reader (který vrací prostá pole), DictReader umožňuje pojmenovaný přístup ke sloupcům — žádné magické indexy jako row[3].
import csv
import json
# Soubor oddělený tabulátory z exportu databáze
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 čte celý soubor líně — vrací řádky po jednom. Volání list(reader) načte všechny řádky do paměti. Pro soubory s miliony řádků zpracovávejte řádky streamovacím způsobem místo jejich shromažďování.Převod CSV ze souboru a API odpovědi
Dva produkční scénáře: čtení CSV souboru z disku a jeho konverze, a stažení CSV dat z API endpointu (mnoho reportovacích služeb vrací CSV). Oba vyžadují správné ošetření chyb.
Čtení CSV souboru → Konverze → Zápis JSON
import csv
import json
import sys
def csv_to_json_file(csv_path: str, json_path: str) -> int:
"""Převede CSV soubor na JSON. Vrátí počet zapsaných řádků."""
try:
with open(csv_path, "r", encoding="utf-8") as f:
rows = list(csv.DictReader(f))
except FileNotFoundError:
print(f"Chyba: {csv_path} nenalezen", file=sys.stderr)
sys.exit(1)
except csv.Error as e:
print(f"Chyba parsování CSV v {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"Zapsáno {count} záznamů do fleet_vehicles.json")Stažení CSV z API → Parsování → JSON
import csv
import io
import json
import urllib.request
def fetch_csv_as_json(url: str) -> str:
"""Stáhne CSV z URL a vrátí ho jako JSON řetězec."""
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)
# Příklad: exportní endpoint vracející 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}")Oba příklady používají explicitní encoding="utf-8" při každém otevření souboru. To je důležité pro CSV soubory s ne-ASCII znaky — jména s diakritikou, adresy se speciálními znaky, CJK text. Bez explicitního kódování Python použije výchozí systémové nastavení, které je na Windows často cp1252 a tiše poškodí vícebajtové znaky.
Ověření JSON výstupu pomocí json.loads()
Po převodu CSV na JSON řetězec můžete výsledek ověřit jeho zpětným parsováním pomocí json.loads(). Tento zpětný průchod odhalí problémy s kódováním, poškozené escape sekvence nebo náhodné řetězcové konkatenace, které by produkovaly neplatný JSON. Zabalte volání do try/except bloku.
import json
json_string = json.dumps({"order_id": "ORD-7291", "total": 129.99})
# Ověření platnosti JSON jeho zpětným parsováním
try:
parsed = json.loads(json_string)
print(f"Platný JSON s {len(parsed)} klíči")
except json.JSONDecodeError as e:
print(f"Neplatný JSON: {e}")
# Platný JSON s 2 klíčiPřevod CSV na JSON z příkazové řádky
Rychlé konverze z terminálu — není potřeba soubor skriptu. Přepínač -c Pythonu spustí inline kód a výsledek lze přenést přes python3 -m json.tool pro formátování.
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 je vestavěný JSON formátovač. Čte JSON ze stdin, ověří ho a vypíše s odsazením 4 mezerami. Užitečné pro ověření, že váš převod CSV na JSON produkuje platný výstup. Pokud preferujete odsazení 2 mezerami nebo potřebujete filtrování, použijte místo toho jq.Výkonná alternativa — orjson
Vestavěný modul json funguje dobře pro většinu CSV souborů. Ale pokud zpracováváte datové sady s desítkami tisíc řádků ve smyčce nebo vaše API potřebuje serializovat data odvozená z CSV při každém požadavku, orjson je 5–10x rychlejší. Je napsán v Rustu, vrací bytes místo str a nativně serializuje datetime, UUID a numpy pole bez vlastní funkce default=.
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() vrací bytes, ne str
json_bytes = orjson.dumps(rows, option=orjson.OPT_INDENT_2)
with open("telemetry_events.json", "wb") as f: # poznámka: "wb" pro bytes
f.write(json_bytes)
print(f"Zapsáno {len(rows)} událostí ({len(json_bytes)} bajtů)")API je mírně odlišné: orjson.dumps() vrací bytes a místo pojmenovaných argumentů používá příznaky option=. Otevřete soubory v binárním režimu zápisu ("wb") při zápisu výstupu orjson. Pokud potřebujete řetězec, zavolejte .decode("utf-8") na výsledku.
Výstup v terminálu se zvýrazněním syntaxe — rich
Ladění převodů CSV na JSON v terminálu je snazší s barevným výstupem. Knihovna rich vykresluje JSON se zvýrazněním syntaxe — klíče, řetězce, čísla a booleany mají každý svou vlastní barvu.
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 přidává do výstupu ANSI escape kódy. Nezapisujte výstup formátovaný přes rich do souboru ani do API odpovědi — bude obsahovat neviditelné řídicí znaky. Používejte rich pouze pro zobrazení v terminálu.Práce s velkými CSV soubory
Načtení 500 MB CSV souboru pomocí list(csv.DictReader(f)) alokuje celou datovou sadu v paměti, pak json.dump() sestaví celý JSON řetězec na vrcholu toho. Pro soubory větší než 50–100 MB přejděte na streamovací přístup nebo zapisujte NDJSON (newline-delimited JSON) — jeden JSON objekt na řádek.
NDJSON — Jeden JSON objekt na řádek
import csv
import json
def csv_to_ndjson(csv_path: str, ndjson_path: str) -> int:
"""Převede CSV na NDJSON, zpracovává jeden řádek najednou."""
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"Zapsáno {rows_written} řádků do access_log.ndjson")
# Každý řádek je samostatný JSON objekt:
# {"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"}Streamování s ijson pro velké JSON soubory
import ijson # pip install ijson
def count_high_value_orders(json_path: str, threshold: float) -> int:
"""Spočítá objednávky nad danou hranici bez načtení celého souboru."""
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
# Zpracování 2 GB JSON souboru s konstantním využitím paměti
high_value = count_high_value_orders("all_orders.json", 500.0)
print(f"Nalezeno {high_value} objednávek nad 500 Kč")ijson slouží ke čtení velkých JSON souborů — pro stranu zápisu výše uvedený vzor NDJSON udržuje využití paměti konstantní bez ohledu na velikost souboru.Časté chyby
Problém: json.dumps() vrátí řetězec. Zápis pomocí f.write() funguje, ale vytváří zbytečný mezilehlý řetězec v paměti — plýtvání pro velké datové sady.
Řešení: Použijte json.dump(data, f) pro přímý zápis do souborového objektu. Streamuje výstup bez sestavování celého řetězce předem.
json_string = json.dumps(rows, indent=2)
with open("output.json", "w") as f:
f.write(json_string) # zbytečný mezilehlý řetězecwith open("output.json", "w", encoding="utf-8") as f:
json.dump(rows, f, indent=2, ensure_ascii=False) # přímý zápisProblém: csv.DictReader vrátí všechny hodnoty jako řetězce. JSON výstup obsahuje "quantity": "5" místo "quantity": 5, což rozhodí typované API konzumenty.
Řešení: Přetypujte číselné sloupce explicitně pomocí int() nebo float() před serializací.
rows = list(csv.DictReader(f))
json.dumps(rows)
# [{"port": "8080", "workers": "4"}] ← řetězce, ne číslarows = 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}] ← správná celá číslaProblém: Na Windows je výchozí kódování cp1252. Ne-ASCII znaky (jména s diakritikou, CJK text) se tiše poškodí nebo vyvolají UnicodeDecodeError.
Řešení: Vždy předávejte encoding='utf-8' do open() pro čtení CSV i zápis JSON.
with open("locations.csv", "r") as f: # používá systémové výchozí kódování
rows = list(csv.DictReader(f))with open("locations.csv", "r", encoding="utf-8") as f:
rows = list(csv.DictReader(f))Problém: str(my_dict) produkuje Python syntaxi (jednoduché uvozovky, True, None), která není platný JSON. API a JSON parsery ho odmítnou.
Řešení: Vždy používejte json.dumps() pro produkci platného JSON. Převádí True na true, None na null a používá dvojité uvozovky.
output = str({"active": True, "note": None})
# "{'active': True, 'note': None}" ← NENÍ platný JSONoutput = json.dumps({"active": True, "note": None})
# '{"active": true, "note": null}' ← platný JSONjson.dumps() vs alternativy — Rychlé srovnání
Pro většinu převodů CSV na JSON je kombinace standardní knihovny csv + json správnou volbou: žádné závislosti, součást Pythonu, funguje všude. Sáhněte po orjson když profilování ukáže, že serializace je úzkým hrdlem — rychlostní rozdíl je reálný ve větším měřítku. Použijte pandas když také potřebujete čištění, filtrování nebo agregaci dat před převodem na JSON. Pokud potřebujete jen rychlou konverzi bez psaní kódu,online konvertor CSV na JSON to zvládne okamžitě.
Často kladené otázky
Jaký je rozdíl mezi json.dump() a json.dumps() v Pythonu?
json.dump(obj, file) zapíše JSON výstup přímo do souborového objektu (cokoliv s metodou .write()). json.dumps(obj) vrátí JSON formátovaný řetězec. Použijte json.dump() při zápisu do souboru, json.dumps() když potřebujete JSON jako Python řetězec pro logování, vložení do payloadu nebo odesílání přes socket. Obě funkce přijímají stejné pojmenované argumenty (indent, sort_keys, ensure_ascii, default).
Jak převést Python slovník na JSON řetězec?
Zavolejte json.dumps(your_dict). Návratová hodnota je str obsahující platný JSON. Přidejte indent=2 pro čitelný výstup. Pokud váš slovník obsahuje ne-ASCII hodnoty, předejte ensure_ascii=False pro zachování znaků jako jsou diakritická písmena nebo CJK text.
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
# }Jak uložit Python seznam slovníků jako JSON soubor?
Otevřete soubor v režimu zápisu s kódováním UTF-8, poté zavolejte json.dump(your_list, f, indent=2, ensure_ascii=False). Vždy používejte json.dump() (ne json.dumps()) pro výstup do souboru — zapisuje přímo do souborového objektu bez vytváření mezilehlého řetězce v paměti.
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)Proč json.dumps() převádí True na true a None na null?
Python booleany (True, False) a None nejsou platné JSON tokeny. Specifikace JSON používá malá písmena true, false a null. json.dumps() toto mapování provádí automaticky — True se stane true, False se stane false, None se stane null. Tyto hodnoty není třeba převádět ručně. V opačném směru json.loads() je mapuje zpět na Python typy.
Jak pracovat s objekty datetime při převodu CSV dat na JSON?
Předejte funkci default= do json.dumps(), která převede objekty datetime na řetězce ISO 8601. Funkce default je volána pro každý objekt, který json neumí serializovat nativně. Pro instance datetime vraťte obj.isoformat() a pro vše ostatní vyvolejte 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"}Mohu převést CSV na JSON bez pandas?
Ano. Python standardní knihovna obsahuje vše potřebné. Použijte csv.DictReader ke čtení každého řádku jako slovník, shromážděte řádky do seznamu a serializujte pomocí json.dump() nebo json.dumps(). Žádné knihovny třetích stran nejsou potřeba. Pandas stojí za přidání pouze tehdy, když potřebujete také čištění dat, odvozování typů nebo ho již používáte jinde v projektu.
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)Pro jednoklikovou alternativu bez psaní jakéhokoliv Pythonu, vyzkoušejte konvertor CSV na JSON — vložte CSV data a okamžitě získejte formátovaný JSON výstup.
Související nástroje
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.