json.loads() în Python

JSON Python 3.0+ (bytes: 3.6+)

Transformă un text JSON în valori Python: dicționare, liste, texte, numere.

Sintaxă
json.loads(text, *, object_hook=None, parse_float=None, parse_int=None, ...)

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ști JSONDecodeError.
  • Folosești eval() ca să citești JSON. Este periculos și nu înțelege true/null.

Comenzi înrudite