Saltar al contenido principal

dart:convert

Aprende sobre las características principales de la biblioteca dart:convert de Dart.

La biblioteca dart:convert (referencia de la API) tiene convertidores para JSON y UTF-8, así como soporte para crear convertidores adicionales. JSON es un formato de texto simple para representar colecciones y objetos estructurados. UTF-8 es una codificación común de ancho variable que puede representar cada carácter del conjunto de caracteres Unicode.

Para usar esta biblioteca, importa dart:convert.

dart
import 'dart:convert';

Decodificar y codificar JSON

#

Decodifica una cadena codificada en JSON en un objeto de Dart con jsonDecode():

dart
// NOTE: Be sure to use double quotes ("),
// not single quotes ('), inside the JSON string.
// This string is JSON, not Dart.
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);

Codifica un objeto compatible de Dart en una cadena con formato JSON con jsonEncode():

dart
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}]',
);

Solo los objetos de tipo int, double, String, bool, null, List o Map (con claves de tipo string) son directamente codificables en JSON. Los objetos List y Map se codifican de forma recursiva.

Tienes dos opciones para codificar objetos que no son directamente codificables. La primera es invocar jsonEncode() con un segundo argumento: una función que devuelve un objeto que sea directamente codificable. Tu segunda opción es omitir el segundo argumento, en cuyo caso el codificador llama al método toJson() del objeto.

Para más ejemplos y enlaces a paquetes relacionados con JSON, consulta Uso de JSON.

Decodificar y codificar caracteres UTF-8

#

Usa utf8.decode() para decodificar bytes codificados en UTF8 en una cadena de Dart:

dart
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ñåţîöñåļîžåţîờñ');

Para convertir un stream de caracteres UTF-8 en una cadena de Dart, especifica utf8.decoder en el método transform() de Stream:

dart
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);
}

Usa utf8.encode() para codificar una cadena de Dart como una lista de bytes codificados en UTF8:

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

assert(encoded.length == utf8Bytes.length);
for (int i = 0; i < encoded.length; i++) {
  assert(encoded[i] == utf8Bytes[i]);
}

Otras funcionalidades

#

La biblioteca dart:convert también tiene convertidores para ASCII e ISO-8859-1 (Latin1). Para más detalles, consulta la referencia de la API para la biblioteca dart:convert.