Ce face JsonDecoder
JsonDecoder este clasa din spatele lui jsonDecode: const JsonDecoder().convert(text) dă același rezultat. Clasa este utilă când ai nevoie de un Converter: de exemplu ca să transformi un flux de octeți (Stream<List<int>>) dintr-un fișier sau din rețea direct în obiecte, cu utf8.decoder.fuse(const JsonDecoder()).
Parametrul opțional reviver este apelat pentru fiecare valoare, de la cele mai adânci spre rădăcină. Ce returnează înlocuiește valoarea; așa poți transforma, de exemplu, textele cu date în DateTime.
Parametri
| Parametru | Descriere |
|---|---|
reviver |
Opțional. Funcție (cheie, valoare) care poate înlocui valorile decodate. |
Ce returnează
convert returnează valoarea decodată (dynamic).
Exemple
Exemplul 1: convert și reviver
Reviver-ul transformă câmpul data în DateTime chiar în timpul decodării.
import 'dart:convert';
void main() {
final decodor = JsonDecoder((cheie, valoare) {
if (cheie == 'data' && valoare is String) return DateTime.parse(valoare);
return valoare;
});
final ev = decodor.convert('{"eveniment": "Zilele Iașului", "data": "2026-10-14"}') as Map;
final DateTime data = ev['data'];
print(ev['eveniment']);
print('Luna: ${data.month}, ziua: ${data.day}');
}
Rezultat
Zilele Iașului
Luna: 10, ziua: 14
Exemplul 2: Din octeți direct în obiecte
fuse leagă decodorul UTF-8 de cel JSON; rezultatul primește octeți (ca dintr-un fișier) și dă obiecte.
import 'dart:convert';
void main() {
final octeti = utf8.encode('{"oras": "Timișoara", "locuitori": 250000}');
final decodor = utf8.decoder.fuse(const JsonDecoder());
final date = decodor.convert(octeti) as Map<String, dynamic>;
print('${date['oras']}: ${date['locuitori']} locuitori');
}
Rezultat
Timișoara: 250000 locuitori
Greșeli frecvente
- Uiți să returnezi valoarea în
reviverpentru cheile pe care nu le modifici. Dacă nu returnezi nimic, valoarea devinenull.
Comenzi înrudite
jsonDecode: Citește un text JSON și îl transformă în Map, List, String, num, bool sau null; dă FormatException la text greșit.JsonEncoder.withIndent: Un convertor reutilizabil spre JSON; varianta withIndent scrie JSON frumos, pe mai multe rânduri, cu indentare.utf8.decoder: Convertoarele din spatele lui utf8: decoder transformă fluxuri de octeți în text, encoder face invers.