Saltar al contenido

Función Recursiva sobre JSON con JavaScript

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