Conoce las funciones principales de la librería Dart dart:convert. Esta librería ofrece convertidores para JSON y UTF-8, y también admite convertidores personalizados.
JSON: Formato de texto ligero usado para representar objetos y colecciones estructuradas.
UTF-8: Codificación de ancho variable capaz de representar todos los caracteres del conjunto Unicode.
import 'dart:convert';Lenguaje del código: JavaScript (javascript)
Codificación y decodificación JSON
jsonDecode(): Cadena JSON → Objeto Dart
Decodifica una cadena con formato JSON a un objeto Dart.
Aviso: Dentro de las cadenas JSON debes usar comillas dobles
"; no se permiten comillas simples'. Este texto es JSON, no código 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);
}Lenguaje del código: Dart (dart)
jsonEncode(): Objeto Dart → Cadena JSON
Codifica objetos Dart serializables en una cadena 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}]',
);
}Lenguaje del código: Dart (dart)
Tipos soportados directamente por JSON
Solo los siguientes tipos pueden codificarse directamente a JSON:
int, double, String, bool, null, List, Map con claves de tipo String
List y Map codifican sus elementos internos de forma recursiva.
Codificación y decodificación de caracteres UTF-8
utf8.decode(): Matriz de bytes UTF-8 → Cadena 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ñåţîöñåļîžåţîờñ');
}Lenguaje del código: Dart (dart)
Decodificación UTF-8 en flujo (para archivos / flujos de red)
Emplea utf8.decoder junto con Stream.transform(). Combínalo con LineSplitter para leer línea a línea:
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);
}Lenguaje del código: Dart (dart)
utf8.encode(): Cadena → Matriz de bytes 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]);
}Lenguaje del código: Dart (dart)
Librería dart:convert