decodeMapJson static method
Esta funcion recorre en profundidad un objeto y lo va decodificando y genero la lista de key que fueron decodificados los parametos son:
mapToDecodeel json a anlizar este puede ser unMap<String, dynamic>o un String que posee un mapa.decodedKeyses la lista de los key que fueron decodeados.currentKeyes 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)');
}
}