json.dumps() în Python

JSON Python 3.0+

Transformă un dicționar, o listă sau alte valori Python în text JSON.

Sintaxă
json.dumps(obiect, *, ensure_ascii=True, indent=None, sort_keys=False, separators=None, default=None)

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