Ce face json.dumps()
dumps() („dump string”) produce un text JSON. Corespondențe: dict → obiect, list/tuple → tablou, str → text, int/float → număr, True/False → true/false, None → null.
Implicit, caracterele non-ASCII sunt scrise ca \u0219; cu ensure_ascii=False diacriticele rămân lizibile. indent=2 formatează frumos, sort_keys=True sortează cheile, iar separators=(",", ":") produce cel mai compact text. Pentru tipuri pe care JSON nu le are (date, Decimal, set), dai o funcție default care le transformă.
Parametri
| Parametru | Descriere |
|---|---|
obiect |
Valoarea transformată. |
ensure_ascii |
False păstrează diacriticele. |
indent |
Numărul de spații pentru indentare. |
sort_keys |
Sortează cheile. |
default |
Funcție pentru tipurile nesuportate. |
Ce returnează
Un text JSON.
Exemple
Exemplul 1: Compact, lizibil și cu diacritice
import json
comanda = {"client": "Ana Popescu", "oras": "Iași", "produse": ["pâine", "lapte"], "platit": True, "nota": None}
print(json.dumps(comanda))
print(json.dumps(comanda, ensure_ascii=False))
print(json.dumps(comanda, ensure_ascii=False, indent=2, sort_keys=True))
print(json.dumps([1, 2, {"a": 3}], separators=(",", ":")))
Rezultat
{"client": "Ana Popescu", "oras": "Ia\u0219i", "produse": ["p\u00e2ine", "lapte"], "platit": true, "nota": null}
{"client": "Ana Popescu", "oras": "Iași", "produse": ["pâine", "lapte"], "platit": true, "nota": null}
{
"client": "Ana Popescu",
"nota": null,
"oras": "Iași",
"platit": true,
"produse": [
"pâine",
"lapte"
]
}
[1,2,{"a":3}]
Exemplul 2: Tipuri pe care JSON nu le cunoaște
import json
from datetime import date
from decimal import Decimal
def convertor(x):
if isinstance(x, date):
return x.isoformat()
if isinstance(x, (Decimal, set)):
return float(x) if isinstance(x, Decimal) else sorted(x)
raise TypeError(f"nu știu să transform {type(x).__name__}")
factura = {"data": date(2026, 10, 19), "total": Decimal("149.90"), "etichete": {"urgent", "b2b"}}
print(json.dumps(factura, default=convertor))
try:
json.dumps({"data": date(2026, 10, 19)})
except TypeError as e:
print("Eroare:", e)
Rezultat
{"data": "2026-10-19", "total": 149.9, "etichete": ["b2b", "urgent"]}
Eroare: Object of type date is not JSON serializable
Greșeli frecvente
- Construiești JSON lipind texte cu f-string-uri. Ghilimelele și caracterele speciale din valori strică rezultatul; folosește
json.dumps. - Te aștepți ca cheile numerice să rămână numere:
json.dumps({1: "a"})dă{"1": "a"}, iar la citire cheia va fi textul"1".
Comenzi înrudite
json.loads(): Transformă un text JSON în valori Python: dicționare, liste, texte, numere.json.dump(): Scrie o valoare Python, ca JSON, direct într-un fișier deschis.json.JSONEncoder și json.JSONDecoder: Clasele din spatele lui dumps() și loads(), extensibile pentru tipuri proprii.