Die dart:convert Bibliothek

Lernen Sie die zentralen Funktionen der Dart-Bibliothek dart:convert kennen. Die Bibliothek stellt Konverter für JSON und UTF-8 zur Verfügung und unterstützt zudem selbst definierte Konverter.

JSON: Ein einfaches Textformat zur Darstellung strukturierter Objekte und Sammlungen.

UTF-8: Eine variabel breite Kodierung, die alle Zeichen des Unicode-Zeichensatzes darstellen kann.

import 'dart:convert';Code-Sprache: JavaScript (javascript)

JSON Kodierung und Dekodierung

jsonDecode(): JSON-String → Dart-Objekt

Dekodiert einen JSON-formatierten String zu einem Dart-Objekt.

Hinweis: Innerhalb von JSON-Strings müssen doppelte Anführungszeichen " verwendet werden; einfache Anführungszeichen ' sind nicht zulässig. Dieser Text ist JSON und kein Dart-Code.

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);
}Code-Sprache: Dart (dart)

jsonEncode(): Dart-Objekt → JSON-String

Kodiert serialisierbare Dart-Objekte zu einem JSON-String:

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}]',
	);
}Code-Sprache: Dart (dart)

Von JSON direkt unterstützte Typen

Nur folgende Typen lassen sich direkt nach JSON kodieren:

int, double, String, bool, null, List, Map mit String-Schlüsseln

List und Map kodieren ihre inneren Elemente rekursiv.

UTF-8 Zeichenkodierung und Dekodierung

utf8.decode(): UTF-8 Byte-Array → Dart String

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ñåţîöñåļîžåţîờñ');
}Code-Sprache: Dart (dart)

Streaming UTF-8 Dekodierung (für Dateien / Netzwerkströme)

Nutzen Sie utf8.decoder zusammen mit Stream.transform(). Kombinieren Sie es mit LineSplitter, um zeilenweise einzulesen:

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);
}Code-Sprache: Dart (dart)

utf8.encode(): String → UTF-8 Byte-Array (Uint8List)

Uint8List encoded = utf8.encode('Îñţérñåţîöñåļîžåţîờñ');

assert(encoded.length == utf8Bytes.length);
for (int i = 0; i < encoded.length; i++) {
  assert(encoded[i] == utf8Bytes[i]);
}Code-Sprache: Dart (dart)

Die dart:convert Bibliothek

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert