Grazie mille per la precisa risposta. Ovviamente è stato un errore di distrazione che non sono riuscito a correggere perchè non mi dava errore altrimenti avrei sicuramente messo quel var vicino alla i (ma non sapevo che su js andasse anche senza dichiararla) e mi sono trovato ingannato.

Si purtroppo non riesco a ricostruire bene quell'albero e quindi la stringa che interessa a me. Al momento sono arrivato a questo risultato ma si ferma quando raggiunge una foglia e non passa alle altre. Cosa sbaglio?

codice:
	<script>
		function costruisciExp(str) 
		{
			var j = JSON.parse(str);
			
			var risultato = j[0].valore + "(";
			risultato += startBuild(j[0]);
			console.log(risultato);
		}
		
		function startBuild (ogg)
		{
			var stringa;
			var n = 0;
			for (var i=0; i<ogg.nodiSub.length; i++) 
			{
				n++;
				stringa = ogg.nodiSub[i].valore;
				if(ogg.nodiSub[i].nodiSub.length > 0)
				{
					stringa += "(";
					stringa += startBuild(ogg.nodiSub[i]);
				}
				if(n != ogg.nodiSub.length)
					stringa += ",";
			}
			
			stringa += ")";
			return stringa;
		}
    
		var prova = "[{\"valore\":\"DECODE\",\"nodiSub\":[{\"valore\":\"TRIM\",\"nodiSub\":[{\"valore\":\"DESCRIZIONE\",\"nodiSub\":[]}]},{\"valore\":\"''\",\"nodiSub\":[]},{\"valore\":\"DOMINIO\",\"nodiSub\":[]},{\"valore\":\"TRIM\",\"nodiSub\":[{\"valore\":\"DESCRIZIONE\",\"nodiSub\":[]}]}]}]";
		costruisciExp(prova);
  </script>