decodeMapJson static method

Map<String, dynamic> decodeMapJson(
  1. dynamic mapToDecode, [
  2. List<String>? decodedKeys,
  3. String? currentKey
])

Esta funcion recorre en profundidad un objeto y lo va decodificando y genero la lista de key que fueron decodificados los parametos son:

  • mapToDecode el json a anlizar este puede ser un Map<String, dynamic> o un String que posee un mapa.
  • decodedKeys es la lista de los key que fueron decodeados.
  • currentKey es el key que se utiliza para hacer referencia en la recursividad.

ejemplo:

object {
"id":"a39e1b4e-7463-4d62-a251-44aac0090428",
"versionColeccion":"2",
"esquemaGeneral": "{\"idEsquemaGeneral \":\"a39e1b4e-7463-4d62-a251-44aac0
090428\",\"status\":\"A\",\"esquema\":\"{\\\"properties\\\":{\\\"campo1\\\
":{\\\"type\\\":\\\"string\\\",\\\"required\\\":false},\\\"campo2\\\":{\\\
"type\\\":\\\"string\\\",\\\"required\\\":false}}}\"}"}

en object se observa que esquema tiene un valor de tipo string dentro un json lo mismo con esquemaGeneral esta funcion va a analizar los valores de tipo string y si es un json lo va a decodificar como resultado final se obtiene: este json valido:

{
id: a39e1b4e-7463-4d62-a251-44aac0090428,
versionColeccion: 2,
esquemaGeneral: {idEsquemaGeneral : a39e1b4e-7463-4d62-a251-44aac0090428,
status: A, esquema: {properties: {campo1: {type: string, required: false},
campo2: {type: string, required: false}}}}
}

y la lista de key decodificados es: esquemaGeneral, esquema como implementarlo:

 final decodedKeys = <String>[];
 final decodedJson = decodeMapJson(object, decodedKeys);

Implementation

static Map<String, dynamic> decodeMapJson(dynamic mapToDecode,
    [List<String>? decodedKeys, String? currentKey]) {
  try {
    ///Este encode ejecuto para asegurarme que viene un json valido
    ///si no es un json valido se lanza una excepcion
    json.encode(mapToDecode);

    final Map<String, dynamic> respuesta = {
      ..._decodeMapJson(mapToDecode, decodedKeys, currentKey)
    };
    return respuesta;
  } catch (error) {
    throw Exception(
        'decodeMapJson(ERROR: $error) JSON no es un tipo valido parametros:(mapToDecode:> $mapToDecode, decodedKeys:> $decodedKeys, currentKey:> $currentKey)');
  }
}