Konvertera CSV till JSON i Python — Guide
Använd det kostnadsfria CSV to JSON direkt i webbläsaren — ingen installation krävs.
Prova CSV to JSON online →CSV-filer dyker upp överallt — exporterade rapporter, databasdumpar, loggutdrag — och förr eller senare behöver du konvertera den CSV-filen till JSON i Python. Standardbiblioteket hanterar detta med två moduler: csv.DictReader omvandlar varje rad till en Python-dict, och json.dumps() serialiserar dessa dicts till en JSON-sträng. För en snabb engångskonvertering utan kod gör CSV till JSON-konverteraren det direkt i webbläsaren. Den här guiden täcker hela den programmatiska vägen: json.dump() vs json.dumps(), skrivning av JSON till filer, serialisering av dataklasser, typomvandling för CSV-värden, hantering av datetime och Decimal, samt högpresterande alternativ som orjson. Alla exempel riktar sig mot Python 3.10+.
- ✓csv.DictReader producerar en lista med dicts — serialisera hela listan med json.dump(rows, f, indent=2) för att skriva en JSON-fil.
- ✓json.dump() skriver direkt till ett filobjekt. json.dumps() returnerar en sträng. Välj rätt variant och undvik en onödig kopia.
- ✓CSV-värden är alltid strängar. Konvertera numeriska kolumner explicit (int(), float()) innan du serialiserar till JSON.
- ✓Skicka ensure_ascii=False till json.dumps() för att bevara Unicode-tecken — accentbokstäver, CJK-text — i utdata.
- ✓För datetime, UUID eller Decimal från CSV, använd default=-parametern med en anpassad reservfunktion.
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") i råutdata. CSV saknar typsystem — varje värde är en sträng. Detta åtgärdas i avsnittet om typomvandling nedan.json.dumps() — Serialisera en Python-dict till en JSON-sträng
Modulen json medföljer varje Python-installation — ingen pip install krävs. json.dumps(obj) tar ett Python-objekt (dict, list, sträng, tal, bool eller None) och returnerar en str med giltig JSON. En Python-ordbok liknar ett JSON-objekt men de är fundamentalt olika: en dict är en Python-datastruktur i minnet, medan en JSON-sträng är serialiserad text. Att anropa json.dumps() överbryggar den skillnaden.
Minimalt exempel — En enda CSV-rad till JSON
import json
# En enstaka CSV-rad representerad som en Python-dict
server_entry = {
"hostname": "web-prod-03",
"ip_address": "10.0.12.47",
"port": 8080,
"region": "eu-west-1"
}
# Konvertera dict till JSON-sträng
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'>Det ger kompakt JSON på en rad — bra för payloads och lagring, dålig för läsbarhet. Lägg till indent=2 för mänskligt läsbar utdata:
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"
# }Ytterligare två parametrar jag använder i nästan varje anrop: sort_keys=True alfabetiserar ordboksnycklar (bra för att jämföra JSON-filer mellan versioner), och ensure_ascii=False bevarar icke-ASCII-tecken istället för att escapa dem till \uXXXX-sekvenser.
import json
warehouse_record = {
"sku": "WH-9031",
"location": "Lager Stockholm 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": "Lager Stockholm 3",
# "quantity": 240,
# "sku": "WH-9031"
# }En snabb notering om parametern separators: standardvärdet är (", ", ": ") vilket lägger till mellanslag efter kommatecken och kolon. För maximalt kompakt utdata (användbart när man bäddar in JSON i URL-parametrar eller pressar bytes ur API-svar) skicka separators=(",", ":").
json.dumps() konverterar Python True till JSON true, None till null, och omger strängar med dubbla citationstecken (Python tillåter enkla citationstecken, JSON gör det inte). Använd alltid json.dumps() för att producera giltig JSON — förlita dig inte på str() eller repr().csv.DictReader till JSON-fil — Den kompletta pipeline
Den vanligaste uppgiften i praktiken är att läsa en hel CSV-fil och spara den som JSON. Här är hela skriptet på under 10 rader. csv.DictReader producerar en iterator av dict-objekt — ett per rad, med den första raden som nycklar. Att omsluta det med list() samlar alla rader i en Python-lista, som serialiseras till en JSON-array.
import csv
import json
# Steg 1: Läs CSV-rader till en lista med dicts
with open("inventory.csv", "r", encoding="utf-8") as csv_file:
rows = list(csv.DictReader(csv_file))
# Steg 2: Skriv listan som en JSON-fil
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")Två open()-anrop: ett för att läsa CSV, ett för att skriva JSON. Det är hela mönstret. Observera att detta använder json.dump() (utan s) — den skriver direkt till filreferensen. Att använda json.dumps() skulle returnera en sträng som du sedan behöver skriva separat med f.write(). json.dump() är mer minneseffektivt eftersom det strömmar utdata istället för att bygga upp hela strängen i minnet först.
När du behöver JSON som en sträng snarare än en fil — för inbäddning i en API-payload, utskrift till stdout eller infogning i en databaskolumn — byt till json.dumps():
import csv
import json
with open("sensors.csv", "r", encoding="utf-8") as f:
rows = list(csv.DictReader(f))
# Hämta JSON som en sträng istället för att skriva till fil
json_payload = json.dumps(rows, indent=2)
print(json_payload)
# [
# {
# "sensor_id": "TMP-4401",
# "location": "Byggnad 7 - Våning 2",
# "reading": "22.4",
# "unit": "celsius"
# },
# ...
# ]En rad vs. hela datamängden: om du anropar json.dumps(enstaka_dict) får du ett JSON-objekt ({...}). Anropar du json.dumps(lista_med_dicts) får du en JSON-array ([{...}, {...}]). Ytterbehållarens form beror på vad du skickar in. De flesta mottagare förväntar sig en array för tabelldata.
Hantering av icke-strängvärden — Typomvandling från CSV
Det här är något som överraskar alla första gången: csv.DictReader returnerar varje värde som en sträng. Talet 42 i din CSV blir strängen "42" i dicten. Om du serialiserar det direkt med json.dumps(), kommer din JSON att ha "quantity": "42" istället för "quantity": 42. API:er som validerar typer kommer att avvisa detta. Du måste konvertera värden explicit.
import csv
import json
def coerce_types(row: dict) -> dict:
"""Convert string values to appropriate Python types."""
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": "Byggnad 7 - Våning 2",
# "temperature": 22.4,
# "humidity": 58.3,
# "battery_pct": 87,
# "active": true
# }Nu är temperature ett flyttal, battery_pct ett heltal och active ett booleskt värde i JSON-utdata. Konverteringsfunktionen är specifik för ditt CSV-schema — det finns inget generiskt sätt att gissa typer från CSV-data, så jag skriver en funktion per CSV-format.
Serialisering av anpassade objekt och icke-standardtyper
Pythons json-modul kan inte serialisera datetime, UUID, Decimal eller anpassade klasser direkt. Att anropa json.dumps() på något av dessa lyfter ett TypeError. Två tillvägagångssätt hanterar detta.
Metod 1: Parametern default=
Skicka en funktion till default= som konverterar okända typer till något serialiserbart. Denna funktion anropas bara för objekt som JSON-kodaren inte vet hur den ska hantera.
import json
from datetime import datetime
from decimal import Decimal
from uuid import UUID
def json_serial(obj):
"""Fallback serializer for non-standard types."""
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 i slutet av din default=-funktion för okända typer. Om du returnerar None eller tyst hoppar över dem får du null i utdata utan någon indikation på att data förlorades.Metod 2: Dataklasser med asdict()
Python-dataklasser ger dina CSV-rader en ordentlig typdefinition. Använd dataclasses.asdict() för att konvertera en dataklass-instans till en vanlig dict, och skicka den sedan till 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="Göteborg",
destination="Stockholm",
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": "Göteborg",
# "destination": "Stockholm",
# "weight_kg": 1240.5,
# "shipped_at": "2026-03-12T08:00:00"
# }asdict() konverterar rekursivt nästlade dataklasser till dicts. Om din dataklass innehåller en lista med andra dataklasser konverteras hela trädet — ingen extra kod behövs.json.dumps() Parameterreferens
Fullständig lista över nyckelordsargument som accepteras av json.dumps() och json.dump(). Båda funktionerna accepterar identiska parametrar — json.dump() tar ett extra första argument för filobjektet.
csv.DictReader — Läsa CSV till Python-dicts
csv.DictReader är den andra halvan av CSV-till-JSON-pipeline. Den omsluter ett filobjekt och ger en dict per rad, med den första raden som fältnamn. Jämfört med csv.reader (som ger vanliga listor) ger DictReader dig namngiven åtkomst till kolumner — inga magiska index som row[3].
import csv
import json
# Tabbseparerad fil från en databasexport
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 läser hela filen lazily — den ger rader en i taget. Att anropa list(reader) laddar alla rader i minnet. För filer med miljontals rader, bearbeta rader i strömningsläge istället för att samla alla.Konvertera CSV från en fil och ett API-svar
Två produktionsscenarier: läsa en CSV-fil från disk och konvertera den, samt hämta CSV-data från en API-endpoint (många rapporteringstjänster returnerar CSV). Båda behöver ordentlig felhantering.
Läs CSV-fil → Konvertera → Skriv JSON
import csv
import json
import sys
def csv_to_json_file(csv_path: str, json_path: str) -> int:
"""Convert a CSV file to JSON. Returns the number of rows written."""
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")Hämta CSV från API → Tolka → JSON
import csv
import io
import json
import urllib.request
def fetch_csv_as_json(url: str) -> str:
"""Fetch CSV from a URL and return it as a 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)
# Exempel: exportendpoint som returnerar 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}")Båda exemplen använder explicit encoding="utf-8" på varje fil som öppnas. Det spelar roll för CSV-filer med icke-ASCII-tecken — accenterade namn, adresser med specialtecken, CJK-text. Utan explicit kodning faller Python tillbaka på systemets standard, som på Windows ofta är cp1252 och tyst förstör flerbyte-tecken.
Verifiera JSON-utdata med json.loads()
När du har konverterat CSV till en JSON-sträng kan du verifiera resultatet genom att tolka det tillbaka med json.loads(). Denna tur-och-retur-kontroll fångar kodningsproblem, trasiga escape-sekvenser eller oavsiktlig strängsammanslagning som skulle producera ogiltig JSON. Omslut anropet i ett try/except-block.
import json
json_string = json.dumps({"order_id": "ORD-7291", "total": 129.99})
# Verifiera att det är giltig JSON genom att tolka det tillbaka
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 keysCSV till JSON-konvertering via kommandoraden
Snabba konverteringar från terminalen — ingen skriptfil behövs. Pythons -c-flagga kör inbäddad kod, och du kan skicka resultatet genom python3 -m json.tool för pretty-printing.
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 är den inbyggda JSON-formateraren. Den läser JSON från stdin, validerar det och skriver ut det med 4-mellanslags indentering. Användbart för att verifiera att din CSV-till-JSON-konvertering producerade giltig utdata. Om du föredrar 2-mellanslags indentering eller behöver filtrering, använd jq istället.Högpresterande alternativ — orjson
Den inbyggda json-modulen fungerar bra för de flesta CSV-filer. Men om du bearbetar datamängder med tiotusentals rader i en loop, eller om ditt API behöver serialisera CSV-härledd data för varje förfrågan, är orjson 5–10 gånger snabbare. Det är skrivet i Rust, returnerar bytes istället för str och serialiserar datetime, UUID och numpy-arrayer inbyggt utan en anpassad default=-funktion.
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() returns bytes, not str
json_bytes = orjson.dumps(rows, option=orjson.OPT_INDENT_2)
with open("telemetry_events.json", "wb") as f: # note: "wb" for bytes
f.write(json_bytes)
print(f"Wrote {len(rows)} events ({len(json_bytes)} bytes)")API:et är något annorlunda: orjson.dumps() returnerar bytes och använder option=-flaggor istället för nyckelordsargument. Öppna filer i binärt skrivläge ("wb") när du skriver orjson-utdata. Om du behöver en sträng, anropa .decode("utf-8") på resultatet.
Terminalutdata med syntaxmarkering — rich
Felsökning av CSV-till-JSON-konverteringar i terminalen blir enklare med färgad utdata. Biblioteket rich renderar JSON med syntaxmarkering — nycklar, strängar, tal och booleaner får var sin färg.
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 lägger till ANSI-styrkoder i utdata. Skriv inte rich-formaterad utdata till en fil eller ett API-svar — det kommer att innehålla osynliga kontrolltecken. Använd rich enbart för terminalvisning.Arbeta med stora CSV-filer
Att ladda en 500 MB stor CSV-fil med list(csv.DictReader(f)) allokerar hela datamängden i minnet, sedan bygger json.dump() den fullständiga JSON-strängen ovanpå det. För filer större än 50–100 MB, byt till ett strömningsupplägg eller skriv NDJSON (newline-delimited JSON) — ett JSON-objekt per rad.
NDJSON — Ett JSON-objekt per rad
import csv
import json
def csv_to_ndjson(csv_path: str, ndjson_path: str) -> int:
"""Convert CSV to NDJSON, processing one row at a time."""
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")
# Varje rad är ett fristående 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"}Strömning med ijson för stora JSON-indatafiler
import ijson # pip install ijson
def count_high_value_orders(json_path: str, threshold: float) -> int:
"""Count orders above a threshold without loading the full file."""
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
# Bearbeta en 2 GB stor JSON-fil med konstant minnesanvändning
high_value = count_high_value_orders("all_orders.json", 500.0)
print(f"Found {high_value} orders above $500")ijson är för att läsa stora JSON-filer tillbaka — för skrivningssidan håller NDJSON-mönstret ovan minnesanvändningen konstant oavsett filstorlek.Vanliga misstag
Problem: json.dumps() returnerar en sträng. Att skriva den med f.write() fungerar men skapar en onödig mellanliggande sträng i minnet — slösaktigt för stora datamängder.
Lösning: Använd json.dump(data, f) för att skriva direkt till filobjektet. Det strömmar utdata utan att bygga upp hela strängen först.
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 writeProblem: csv.DictReader returnerar alla värden som strängar. JSON-utdata innehåller "quantity": "5" istället för "quantity": 5, vilket bryter mot typade API-konsumenter.
Lösning: Konvertera numeriska kolumner explicit med int() eller float() innan serialisering.
rows = list(csv.DictReader(f))
json.dumps(rows)
# [{"port": "8080", "workers": "4"}] ← strängar, inte talrows = 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}] ← korrekta heltalProblem: På Windows är standardkodningen cp1252. Icke-ASCII-tecken (accenterade namn, CJK-text) förstörs tyst eller lyfter UnicodeDecodeError.
Lösning: Skicka alltid encoding='utf-8' till open() för både CSV-läsning och JSON-skrivning.
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))Problem: str(min_dict) producerar Python-syntax (enkla citationstecken, True, None) som inte är giltig JSON. API:er och JSON-tolkar avvisar det.
Lösning: Använd alltid json.dumps() för att producera giltig JSON. Det konverterar True till true, None till null och använder dubbla citationstecken.
output = str({"active": True, "note": None})
# "{'active': True, 'note': None}" ← INTE giltig JSONoutput = json.dumps({"active": True, "note": None})
# '{"active": true, "note": null}' ← giltig JSONjson.dumps() vs alternativ — Snabb jämförelse
För de flesta CSV-till-JSON-konverteringar är kombinationen csv + json från standardbiblioteket rätt val: inga beroenden, medföljer Python, fungerar överallt. Välj orjson när profilering visar att serialisering är en flaskhals — hastighetsskillnaden är verklig i stor skala. Använd pandas när du också behöver datarensning, filtrering eller aggregering innan konverteringen till JSON. Om du bara behöver en snabb konvertering utan att skriva kod hanterar online-konverteraren för CSV till JSON det direkt.
Vanliga frågor
Vad är skillnaden mellan json.dump() och json.dumps() i Python?
json.dump(obj, file) skriver JSON-utdata direkt till ett filobjekt (vad som helst med en .write()-metod). json.dumps(obj) returnerar en JSON-formaterad sträng. Använd json.dump() när du skriver till en fil, json.dumps() när du behöver JSON som en Python-sträng för loggning, inbäddning i en payload eller sändning via en socket. Båda accepterar samma nyckelordsargument (indent, sort_keys, ensure_ascii, default).
Hur konverterar jag en Python-ordbok till en JSON-sträng?
Anropa json.dumps(din_dict). Returvärdet är en str med giltig JSON. Lägg till indent=2 för läsbar utdata. Om din ordbok innehåller icke-ASCII-värden, skicka ensure_ascii=False för att bevara tecken som accentbokstäver eller 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
# }Hur sparar jag en Python-lista med ordböcker som en JSON-fil?
Öppna en fil i skrivläge med UTF-8-kodning och anropa sedan json.dump(din_lista, f, indent=2, ensure_ascii=False). Använd alltid json.dump() (inte json.dumps()) för filutdata — den skriver direkt till filreferensen utan att skapa en mellanliggande sträng i minnet.
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)Varför omvandlar json.dumps() True till true och None till null?
Pythons booleaner (True, False) och None är inte giltiga JSON-tokens. JSON-specifikationen använder gemena true, false och null. json.dumps() hanterar denna mappning automatiskt — True blir true, False blir false, None blir null. Du behöver inte konvertera dessa manuellt. Omvänt mappar json.loads() dem tillbaka till Python-typer.
Hur hanterar jag datetime-objekt när jag konverterar CSV-data till JSON?
Skicka en default=-funktion till json.dumps() som konverterar datetime-objekt till ISO 8601-strängar. Standardfunktionen anropas för alla objekt som json inte kan serialisera direkt. Returnera obj.isoformat() för datetime-instanser och lyft TypeError för allt annat.
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"}Kan jag konvertera CSV till JSON utan pandas?
Ja. Pythons standardbibliotek innehåller allt du behöver. Använd csv.DictReader för att läsa varje rad som en ordbok, samla raderna i en lista och serialisera med json.dump() eller json.dumps(). Inga tredjepartsbibliotek krävs. pandas är bara värt att lägga till om du också behöver datarensning, typinferens eller redan använder det på annat håll i projektet.
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)För ett alternativ med ett enda klick utan att skriva någon Python, prova CSV till JSON-konverteraren — klistra in din CSV-data och få formaterad JSON-utdata direkt.
Relaterade verktyg
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.