2008-10-08 5 views
20

Tengo una matriz de JavaScript que, entre otros, contiene una URL. Si intento simplemente colocar la URL en la página (la matriz se encuentra en un proyecto que involucra la API de Yahoo Maps), muestra la URL como debería ser.¿Cómo JSON decodifica elementos de matriz en JavaScript?

Pero si trato de hacer una redirección o simplemente hacer una 'alerta' en el elemento de la matriz enlace me sale:

función() {return JSON.encode (este);}

Por lo que veo, esto se debe a que el navegador hace un código JSON cuando enlista la página, por lo tanto, el enlace se muestra OK. He intentado varios métodos para hacerlo redirigir (eso es lo que quiero hacer con el enlace) correctamente (incluido el uso de 'eval') pero sin suerte.

Después de seguir algunas sugerencias, he ejecutado eval('(' + jsonObject + ')') pero todavía devuelve el mismo resultado.

¿Cómo se hace esto?

+0

No está claro a qué se refiere ... se puede colocar más código de ejemplo? El contenido real de la matriz y la llamada de redirección serían muy útiles. –

Respuesta

2

La decodificación JSON en JavaScript es simplemente una evaluación() si confía en la cadena o en el código más seguro que puede encontrar en http://json.org si no lo hace.

A continuación, tendrá una estructura de datos de JavaScript que puede recorrer para obtener los datos que necesita.

+0

Como decía, traté de 'evaluar' el elemento de enlace pero luego me devolvió 'indefinido'. Los datos en la matriz provienen de analizar un XML, ¿cree que puede tener algo que ver con eso? – Brayn

5

Si recibe este texto en una alerta:

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

cuando intenta alerta (myArray [i]), entonces hay algunas posibilidades:

  • miMatriz [i] es una función (lo más probable)
  • myArray [i] es la cadena literal "función() {return JSON.encode (this);}"
  • myArray [i] tiene un método .toString() que devuelve esa función o esa cuerda Este es el menos probable de los tres.

La forma más sencilla de decirlo sería comprobar typeof (myArray [i]).

+0

Dudo que sea una cadena literal. Lo más probable es que sea una función. He intentado "eval ('(' + jsonObject + ')')" pero aún devuelve el mismo resultado que antes ... – Brayn

+0

Sí, me imagino que pasar una función a eval() llamaría al método toString de esa función, devolviendo una cadena que evaluaría de regreso a esa función en sí misma. Entonces eso tiene sentido. –

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

eval es solo una forma segura de descodificar datos JSON si confía al 100% en su fuente: D – olliej

+1

Esto no puede ser evaluado -> {"code": 200, "lang": "en-de", "text": ["cadena 1", "cadena 2"]} –

1

Si el elemento de objeto que se obtiene es una función, puede intentar esto:

var url = myArray[i](); 
7

Suponga que tiene una matriz en PHP como $ iniData con 5 campos. Si el uso de AJAX -

echo json_encode($iniData); 

en JavaScript, utilice la siguiente:

<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

que decodificar JSON esta manera:

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