2008-10-08 28 views
20

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.Come JSON decodificare gli elementi dell'array in JavaScript?

Ma se provo a fare un redirect o semplicemente fare un 'alert' sull'elemento di collegamento dell'array ottengo:

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

Per quanto vedo, questo è dovuto al fatto che il browser esegue un JSON.encode quando esegue il rendering della pagina, quindi il collegamento 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 sempre lo stesso risultato.

Quindi come va?

+0

Non è chiaro che cosa vuoi dire ... puoi pubblicare più codice di esempio? Il contenuto effettivo dell'array e la chiamata di reindirizzamento sarebbero molto utili. –

risposta

2

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.

Si avrà quindi un datastructure JavaScript che è possibile attraversare per i dati necessari.

+0

Come stavo dicendo, ho provato a 'valutare' l'elemento link ma poi è tornato 'indefinito'. I dati nell'array derivano dall'analisi di un XML, pensi che possa avere qualcosa a che fare con questo? – Brayn

5

Se si ottiene questo testo in un avviso:

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

quando si tenta di allarme (myArray [i]), poi ci sono alcune possibilità:

  • myArray [i] è un funzione (più probabile)
  • myArray [i] è la stringa letterale "function() {return JSON.encode (this);}"
  • myArray [i] ha un metodo di .toString() che restituisce quella funzione o quella stringa. Questa è la meno probabile delle tre.

Il modo più semplice per dire sarebbe quello di controllare typeof (myArray [i]).

+0

Dubito che sia una stringa letterale. Molto probabilmente è una funzione. Ho provato a "eval ('(' + jsonObject + ')')" ma comunque restituisce lo stesso risultato di prima ... – Brayn

+0

Sì, immaginerei che passare una funzione a eval() chiamerebbe il metodo toString di quella funzione, restituendo una stringa che restituirebbe a quella funzione stessa. Quindi ha senso. –

3
eval('(' + jsonObject + ')') 
+7

eval è solo un modo sicuro per decodificare i dati JSON se ti fidati al 100% della tua fonte: D – olliej

+1

Questo non può essere valutato -> {"codice": 200, "lang": "en-de", "testo": ["stringa 1", "stringa 2"]} –

1

Se l'elemento oggetto che si ottiene è una funzione, si può provare questo:

var url = myArray[i](); 
7

Supponiamo di avere un array in PHP da $ iniData con 5 campi. Se si utilizza Ajax -

echo json_encode($iniData); 

in JavaScript, utilizzare il seguente:

<script type="text/javascript"> 
    $(document).ready(function(){ 
     $.ajax({ 
      type: "GET", 
      url: "ajaxCalls.php", 
      data: "dataType=ini", 
      success: function(msg) 
      { 
       var x = eval('(' + msg + ')'); 
       $('#allowed').html(x.allowed);    // these are the fields which you can now easily access.. 
       $('#completed').html(x.completed); 
       $('#running').html(x.running); 
       $('#expired').html(x.expired); 
       $('#balance').html(x.balance); 
      } 
     }); 
    }); 
</script> 
39
var obj = jQuery.parseJSON('{"name":"John"}'); 
alert(obj.name === "John"); 

See the jQuery API.

-1

decodifico JSON in questo modo:

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