Treci la conținutul principal

Limbajul în care vorbesc API-urile

API-urile schimbă date sub formă de JSON — text precum {"id": 1, "name": "Ana"}. Modulul json din Python traduce în ambele direcții: json.dumps transformă datele Python în text JSON, iar json.loads analizează textul JSON și îl transformă în date Python.

Nu există niciun strat de mapare de configurat: cheile sunt numele câmpurilor, exact cum sunt scrise. Un dataclass îi dă unei înregistrări o formă fixă, iar dataclasses.asdict o transformă într-un dicționar simplu, gata pentru json.dumps — redenumește cheile manual atunci când API-ul are nevoie de o altă scriere.


Din date Python în JSON

json.dumps produce JSON pe o singură linie, pentru mașini; json.dumps(..., indent=2) produce JSON ușor de citit, pentru oameni și pentru jurnale. Nimic nu este eliminat automat — când un câmp gol nu trebuie să apară în JSON, șterge-l din dicționar înainte de conversie.

Pe o linie și formatat

Ana nu are email, iar funcția ajutătoare elimină câmpul gol din dicționarul ei — JSON-ul ei rămâne curat. Înregistrarea completă a lui Ben se afișează indentată.

Prompt
Scrie un program Python cu un dataclass User al cărui câmp email are ca valoare implicită un șir gol. Convertește un utilizator fără email pe o singură linie, după ce elimini câmpul gol din dicționar, și un utilizator complet cu json.dumps și indent=2, afișând ambele rezultate JSON.
Ieșire: program Python complet

Din JSON în date Python

json.loads analizează JSON-ul și îl transformă în date Python simple — dicționare, liste, șiruri, numere. Cheile necunoscute nu sunt aruncate: tot ce se află în JSON ajunge în dicționar, iar o înregistrare tipizată se construiește doar din câmpurile de care are nevoie. Un JSON greșit ridică json.JSONDecodeError — prinde această excepție; ea este semnalul că textul nu era deloc JSON.

Loads și cheia în plus

JSON-ul conține o cheie extra pe care dataclass-ul User nu o are — json.loads o păstrează în dicționar, iar dataclass-ul alege pur și simplu cele două câmpuri de care are nevoie. Un JSON stricat, în schimb, ridică o eroare reală.

Prompt
Scrie un program Python care analizează cu json.loads un șir JSON ce conține o cheie necunoscută în plus, afișând dicționarul care păstrează cheia în plus și un dataclass tipizat User construit din câmpurile de care are nevoie, apoi încearcă să analizeze un JSON stricat și afișează JSONDecodeError.
Ieșire: program Python complet

Date imbricate

Datele reale ale unui API sunt imbricate: o comandă conține utilizatorul ei și o listă de articole. Dataclass-urile din interiorul altor dataclass-uri și listele se transformă automat în obiecte și tablouri JSON — asdict parcurge întreaga structură.

O comandă cu un utilizator în interior

Dataclass-ul imbricat User devine un obiect JSON imbricat, iar lista de articole devine un tablou JSON — forma datelor Python este forma JSON-ului.

Prompt
Scrie un program Python cu un dataclass Order care conține un id, o listă de nume de articole și un dataclass User imbricat. Transformă o comandă într-un dicționar cu dataclasses.asdict și afișeaz-o cu json.dumps și indent=2, pentru a arăta obiectele și tablourile imbricate.
Ieșire: program Python complet