Ce face json.loads()
loads() („load string”) citește un text (sau bytes) JSON și returnează valoarea Python corespunzătoare. Un JSON invalid aruncă json.JSONDecodeError (subclasă a lui ValueError), cu linia și coloana erorii.
object_hook este o funcție aplicată fiecărui obiect citit, utilă pentru a crea obiecte proprii. parse_float=Decimal păstrează exact numerele zecimale (de exemplu sume de bani).
Parametri
| Parametru | Descriere |
|---|---|
text |
Textul JSON. |
object_hook |
Funcție aplicată fiecărui dicționar. |
parse_float, parse_int |
Funcții pentru numere. |
Ce returnează
Valoarea Python.
Exemple
Exemplul 1: Citirea unui răspuns JSON
import json
raspuns = '{"utilizator": "ana", "varsta": 25, "admin": false, "roluri": ["editor", "autor"], "telefon": null}'
date = json.loads(raspuns)
print(date["utilizator"], date["varsta"] + 1, date["admin"], date["telefon"])
print(type(date).__name__, date["roluri"][0])
Rezultat
ana 26 False None
dict editor
Exemplul 2: JSON invalid și numere exacte
import json
from decimal import Decimal
try:
json.loads('{"nume": "Ana",}')
except json.JSONDecodeError as e:
print("JSON invalid:", e.msg, "la linia", e.lineno, "coloana", e.colno)
print(json.loads('{"total": 0.1}', parse_float=Decimal))
print(json.loads('{"x": 1, "y": 2}', object_hook=lambda d: tuple(d.values())))
Rezultat
JSON invalid: Illegal trailing comma before end of object la linia 1 coloana 15
{'total': Decimal('0.1')}
(1, 2)
Greșeli frecvente
- Scrii JSON cu ghilimele simple (
{'a': 1}): JSON acceptă doar ghilimele duble și primeștiJSONDecodeError. - Folosești
eval()ca să citești JSON. Este periculos și nu înțelegetrue/null.
Comenzi înrudite
json.load(): Citește un fișier JSON și returnează conținutul ca valori Python.json.dumps(): Transformă un dicționar, o listă sau alte valori Python în text JSON.json.JSONEncoder și json.JSONDecoder: Clasele din spatele lui dumps() și loads(), extensibile pentru tipuri proprii.