Desarrollo web no image

Published on julio 1st, 2011 | by Javi

1

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

Tags: , , , ,


About the Author



One Response to Función Recursiva sobre JSON con JavaScript

  1. Ángel says:

    se pueden serializar o deserializar archivos JSON ?

Deja un comentario

Tu dirección de correo electrónico no será publicada.


6 − = cuatro

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Back to Top ↑