Ce face jsonEncode
jsonEncode din dart:convert transformă o valoare Dart în text JSON, pe un singur rând, fără spații. Acceptă direct Map cu chei String, List, String, int, double, bool și null, oricât de imbricate.
Pentru propriile clase, definește metoda Map<String, dynamic> toJson(): jsonEncode o apelează automat. Alternativ, dai funcția toEncodable, care primește orice obiect necunoscut (de exemplu un DateTime) și returnează ceva ce se poate codifica. Dacă un obiect nu poate fi transformat, se aruncă JsonUnsupportedObjectError.
Diacriticele rămân ca atare în text ("Iași"), nu sunt transformate în \u…. Pentru JSON cu indentare vezi JsonEncoder.withIndent.
Parametri
| Parametru | Descriere |
|---|---|
object |
Valoarea de transformat. |
toEncodable |
Opțional. Funcție apelată pentru obiectele care nu sunt tipuri JSON și nu au toJson(). |
Ce returnează
Textul JSON (String).
Exemple
Exemplul 1: Hărți și liste
import 'dart:convert';
void main() {
final elev = {
'nume': 'Ana Popescu',
'oras': 'Iași',
'varsta': 16,
'note': [9, 10, 8.5],
'bursier': true,
'telefon': null,
};
print(jsonEncode(elev));
print(jsonEncode([1, 'doi', false]));
print(jsonEncode('text cu "ghilimele"'));
}
Rezultat
{"nume":"Ana Popescu","oras":"Iași","varsta":16,"note":[9,10,8.5],"bursier":true,"telefon":null}
[1,"doi",false]
"text cu \"ghilimele\""
Exemplul 2: O clasă proprie cu toJson
jsonEncode găsește metoda toJson și o folosește, inclusiv pentru obiectele dintr-o listă.
import 'dart:convert';
class Produs {
final String nume;
final double pret;
Produs(this.nume, this.pret);
Map<String, dynamic> toJson() => {'nume': nume, 'pret': pret};
}
void main() {
final cos = [Produs('pâine', 4.5), Produs('lapte', 7.2)];
print(jsonEncode(cos));
}
Rezultat
[{"nume":"pâine","pret":4.5},{"nume":"lapte","pret":7.2}]
Exemplul 3: Date calendaristice cu toEncodable
DateTime nu are toJson; fără toEncodable codificarea ar arunca o eroare.
import 'dart:convert';
void main() {
final programare = {
'pacient': 'Mihai',
'data': DateTime.utc(2026, 3, 15, 10, 30),
};
try {
jsonEncode(programare);
} on JsonUnsupportedObjectError catch (eroare) {
print('Eroare: ${eroare.unsupportedObject.runtimeType} nu se poate codifica');
}
final text = jsonEncode(programare, toEncodable: (o) {
if (o is DateTime) return o.toIso8601String();
return o.toString();
});
print(text);
}
Rezultat
Eroare: DateTime nu se poate codifica
{"pacient":"Mihai","data":"2026-03-15T10:30:00.000Z"}
Greșeli frecvente
- Folosești chei care nu sunt
String:jsonEncode({1: 'a'})aruncă eroare. JSON acceptă doar chei text; transformă-le cu'$cheie'. - Numești metoda
toJSONsautoMap. Dart caută exacttoJson. - Te aștepți la JSON frumos, pe mai multe rânduri.
jsonEncodescrie totul pe un rând; foloseșteJsonEncoder.withIndent(' ').
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: Codec-ul UTF-8: encode transformă textul în octeți, decode transformă octeții înapoi în text.