Découvrez les fonctionnalités principales de la bibliothèque Dart dart:convert. Cette bibliothèque propose des convertisseurs pour JSON et UTF-8 et autorise également la création de convertisseurs personnalisés.
JSON : format textuel léger destiné à représenter des objets et collections structurés.
UTF-8 : codage à largeur variable capable de représenter tous les caractères de l’ensemble Unicode.
import 'dart:convert';Langage du code : JavaScript (javascript)
Encodage et décodage JSON
jsonDecode() : Chaîne JSON → Objet Dart
Décode une chaîne au format JSON en un objet Dart.
Attention : les chaînes JSON doivent utiliser des guillemets doubles
"; les apostrophes simples'ne sont pas autorisées. Ce texte est du JSON, pas du code Dart.
import 'dart:convert';
void main() {
var jsonString = '''
[
{"score": 40},
{"score": 80}
]
''';
var scores = jsonDecode(jsonString);
assert(scores is List);
var firstScore = scores[0];
assert(firstScore is Map);
assert(firstScore['score'] == 40);
}Langage du code : Dart (dart)
jsonEncode() : Objet Dart → Chaîne JSON
Encode des objets Dart sérialisables en chaîne JSON :
import 'dart:convert';
void main() {
var scores = [
{'score': 40},
{'score': 80},
{'score': 100, 'overtime': true, 'special_guest': null},
];
var jsonText = jsonEncode(scores);
assert(
jsonText ==
'[{"score":40},{"score":80},'
'{"score":100,"overtime":true,'
'"special_guest":null}]',
);
}Langage du code : Dart (dart)
Types pris en charge nativement par JSON
Seuls les types suivants peuvent être directement encodés en JSON :
int, double, String, bool, null, List, Map dont les clés sont des String
List et Map encodent récursivement leurs éléments internes.
Encodage et décodage de caractères UTF-8
utf8.decode() : Tableau d’octets UTF-8 → Chaîne Dart
import 'dart:convert';
void main() {
List<int> utf8Bytes = [
0xc3, 0x8e, 0xc3, 0xb1, 0xc5, 0xa3, 0xc3, 0xa9,
0x72, 0xc3, 0xb1, 0xc3, 0xa5, 0xc5, 0xa3, 0xc3,
0xae, 0xc3, 0xb6, 0xc3, 0xb1, 0xc3, 0xa5, 0xc4,
0xbc, 0xc3, 0xae, 0xc5, 0xbe, 0xc3, 0xa5, 0xc5,
0xa3, 0xc3, 0xae, 0xe1, 0xbb, 0x9d, 0xc3, 0xb1,
];
var funnyWord = utf8.decode(utf8Bytes);
assert(funnyWord == 'Îñţérñåţîöñåļîžåţîờñ');
}Langage du code : Dart (dart)
Décodage UTF-8 en continu (pour fichiers / flux réseau)
Utilisez utf8.decoder associé à Stream.transform(). Ajoutez LineSplitter pour lire le contenu ligne par ligne :
var lines = utf8.decoder.bind(inputStream).transform(const LineSplitter());
try {
await for (final line in lines) {
print('Got ${line.length} characters from stream');
}
print('file is now closed');
} catch (e) {
print(e);
}Langage du code : Dart (dart)
utf8.encode() : Chaîne → Tableau d’octets UTF-8 (Uint8List)
Uint8List encoded = utf8.encode('Îñţérñåţîöñåļîžåţîờñ');
assert(encoded.length == utf8Bytes.length);
for (int i = 0; i < encoded.length; i++) {
assert(encoded[i] == utf8Bytes[i]);
}Langage du code : Dart (dart)
Bibliothèque dart:convert