Saltar al contenido
Codifíca.me | Desarrollo web | Programación

Función Recursiva sobre JSON con JavaScript

1 julio, 2011

Deprecated: Function create_function() is deprecated in /home/nekdyruf/public_html/codi/wp-content/plugins/wp-syntax/geshi/geshi.php on line 4751

A continuación os dejo una función recursiva JavaScript que he utilizado para recorrer objetos JSON.

Si por ejemplo tenemos un objeto JSON tal que así:

var arbol =  [	 {"id":1, "code":1,"hijos":  [
{"id":11,"code":11},
{"id":12,"code":12}] },
{"id":2, "code":2, "hijos":
[{"id":21,"code":21},
{"id":22,"code":22, "hijos": [
{"id":221,"code":221},
{"id":222,"code":222} ]	}
] } ]

Con esta función recorremos todos los nodos del JSON recursivamente y sacamos un alert por cada ID de cada nodo.

function recorrerArbol(json)		{
 
var type;
 
var resultado;
 
for (var i=0; i<json.length; i++){
 
type = typeof json[i].hijos;
 
if (type=="undefined"){
 
resultado = true;					alert(json[i].id);
 
}
 
else{
 
alert(json[i].id);
 
resultado = recorrerArbol(json[i].hijos);
 
}
 
}
 
return resultado;
 
}

Para llamar a la función utilizamos simplemente:

recorrerArbol(arbol);

Si además de recorrer el objeto queremos modificar algún valor de sus nodos se puede modificar la función anterior para que lo realice, por ejemplo queremos cambiar el Id=22 por Id = 12345

function recorrerYReemplazarArbol(json, valorOrig, valorDest)		{
 
var type;
 
var resultado;
 
for (var i=0; i<json.length; i++){
 
type = typeof json[i].hijos;
 
if (type=="undefined"){
 
resultado = true;
 
alert(json[i].id);
 
if (json[i].id==valorOrig){
 
json[i].id = valorDest;
 
alert("Modificado: "+json[i].id);
 
}
 
}
 
else{
 
alert(json[i].id);
 
if (json[i].id==valorOrig){
 
json[i].id = valorDest;
 
alert("Id Modificado: "+json[i].id);
 
}
 
resultado = recorrerYReemplazarArbol(json[i].hijos, valorOrig, valorDest);
 
}
 
}
 
return resultado;
 
}

Para llamar a la función utilizamos simplemente:

recorrerYReemplazarArbol(arbol, “22”, “12345”);

Espero que os sirva de ayuda