Iterare JSON con javascript

Non voglio soffermarmi a parlare di cosa e come usare JSON ma di come attraversarlo in modo ricorsivo.

Nel mio caso avevo bisogno di gestire una matrice complessa, velocemente modificabile tramite javascript, ma prima dell’invio al server dovevo trasformare il tutto in formato XML.

La struttura dinamica della matrice JSON non mi permettava un approccio statico, e quindi l’unica strada percorribile mi è sembrata un iterazione ricorsiva.

La funzione fa uso della proprietà “constructor” per capire il tipo di aggetto contenuto nella coppia e quindi valutare la gestione della ricorsività.

function jsonIterator( obj ) {
 for ( var i in obj ) { 
  if ( obj[i].constructor.toString().indexOf('Object') < 0 ) { 
   alert( "<" + i + ">" + obj[i] + "</" + i +">" );
  } else {
   // se è un oggetto gestisco la ricorsività
   alert( "<" + i + ">" );
   jsonIterator( obj[i] );
   alert( "</" + i + ">" );
  }
 }
}

Se quindi ipotizziamo un matrice complessa simile a questa …

o = {}
o.a = 1
o.b = [9,8,7,6,5]
o.c = {}
o.c.aa = 11
o.c.bb = 22
o.c.cc = {}
o.c.cc.aaa = 111
o.c.cc.bbb = "stringa"
o.c.cc.ccc = [1,2,3,4,5]
o.c.dd = 33
o.d = "stringa"

.. possiamo attraversarlo iterarlo semplicemente scrivendo:

jsonIterator(o)

Forse ho scoperto l’acqua calda … ma mi sento tanto bravo 🙂 🙂

Per il momento è testato solo con ie6 e FF1.5, se riesco domani provo con ie7 e FF2

Maurizio Pelizzone

Maurizio Pelizzone

Sono Maurizio Pelizzone, sviluppatore WordPress da oltre vent'anni e consulente di intelligenza artificiale a Torino, co-fondatore di Mavida. Realizzo plugin e integrazioni su misura per WordPress e WooCommerce, automazioni dei processi con n8n e agenti AI, e tengo corsi e workshop su Claude Code, prompt engineering e vibe coding, in presenza a Torino o da remoto. Sono speaker ai WordCamp e autore della guida gratuita in italiano a Claude Code; se vuoi parlarmi di un progetto puoi prenotare una call conoscitiva.

Lascia una risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *