Come JSON decodificare gli elementi dell’array in JavaScript?

Ho un array JavaScript che, tra gli altri, contiene un URL. Se provo a inserire semplicemente l’URL nella pagina (l’array si trova in un progetto che coinvolge l’API di Yahoo! Maps) mostra l’URL come dovrebbe essere.

Ma se provo a fare un reindirizzamento o semplicemente faccio un ‘alert’ sull’elemento array del collegamento ottengo:

function () {return JSON.encode (this);}

Per quanto vedo, questo è dovuto al fatto che il browser fa un JSON.encode quando esegue il rendering della pagina, quindi il link viene visualizzato OK. Ho provato diversi metodi per renderlo redirect (è quello che voglio fare con il link) correttamente (incluso l’uso di ‘eval’) ma senza fortuna.

Dopo aver seguito alcuni suggerimenti, ho eseguito eval('(' + jsonObject + ')') ma restituisce comunque lo stesso risultato.

Quindi come va?

 var obj = jQuery.parseJSON('{"name":"John"}'); alert( obj.name === "John" ); 

Vedi l’API jQuery .

Supponiamo di avere una matrice in PHP come $ iniData con 5 campi. Se si utilizza ajax –

 echo json_encode($iniData); 

In Javascript, utilizzare quanto segue:

  

Se ricevi questo testo in un avviso:

 function(){return JSON.encode(this);} 

quando provi alert (myArray [i]), ci sono alcune possibilità:

  • myArray [i] è una funzione (molto probabilmente)
  • myArray [i] è la stringa letterale “function () {return JSON.encode (this);}”
  • myArray [i] ha un metodo .toString () che restituisce quella funzione o quella stringa. Questa è la meno probabile delle tre.

Il modo più semplice per dirlo è il controllo di typeof (myArray [i]).

 eval('(' + jsonObject + ')') 

La decodifica JSON in JavaScript è semplicemente un’eval () se ti fidi della stringa o del codice più sicuro che puoi trovare su http://json.org se non lo fai.

Avrai quindi una struttura dati JavaScript che puoi percorrere per i dati di cui hai bisogno.

Se l’elemento dell’object che ottieni è una funzione, puoi provare questo:

 var url = myArray[i](); 

Decodifico JSON in questo modo:

 eval( 'var from_json_object = ' + my_json_str + ';' );