2012-02-09 22 views
29

EDIT: He obtenido la insignia de "pregunta famosa" con esta pregunta, así que pensé que volvería y me quedaría justo en la parte superior para que las personas que la buscan obtengan una respuesta inmediatamente.jQuery.getJSON y jQuery.parseJSON return [object Object]?

Básicamente, era nuevo en JSON. JSON es un objeto (obviamente), ¡ya que contiene todo tipo de cosas! Así que estaba como "Hola, javascript, solo aparece una alerta con todos estos datos JSON", esperando que me dé los datos JSON como una cadena. Pero javascript no hace eso (¡lo cual es bueno!), Por lo que fue como "Oye, así es como mostramos los objetos, [object Object]".

Lo que podría haber hecho es algo así como alert(obj.DATA[0][1]) y me habría enseñado ese trozo del objeto.

Lo que realmente quería era verificar que estaba haciendo buenos datos JSON, que podría haber consultado con JSON.stringify.

De todos modos, ¡de vuelta a nuestras preguntas programadas regularmente!


estoy tratando de obtener algunos datos JSON con una llamada AJAX, jQuery, pero no parece que mi JSON.

si hago algo como:

function init2() { 
    alert("inside init2"); 
    jQuery.ajax({ 
     url: "/Mobile_ReportingChain.cfm", 
     type: "POST", 
     async: false, 
     success: function (data) { 
      alert(data); 
      var obj = jQuery.parseJSON(data); 
      alert(obj); 
     } 
    }); 
} 

consigo esto a partir de alerta (datos):

{"COLUMNS":["MFIRST_NAME","MLAST_NAME","MMDDL_NAME","MEMPLY_ID","MAIM_NBR","EMPLY_ID"], 
    "DATA":[ 

["FNAME1   ","LNAME1     ","MI1    ","000-14-7189","026-0010","000-62-7276"]  

,["FNAME2   ","LNAME2     ","MI2    ","000-01-2302","101-1850","000-14-7189"] 

,["FNAME3   ","LNAME3     ","MI3    ","000-91-3619","102-1000","000-01-2302"]  

,["FNAME4   ","LNAME4     ","MI4    ","000-25-9687","102-1000","000-91-3619"] 

]} 

cuales JSONLint dice es JSON válida. alerta (obj) me da este, sin embargo:

[object Object] 

añadiendo dataType: "json" o "text json" sólo hace que informan al [object Object]alert(data).

Realmente me gustaría que esto se resuelva, ¿alguien sabe por qué está haciendo esto? Soy bastante nuevo en jQuery, mi objetivo es obtener una matriz para cada una de las columnas. El mismo código que estoy usando ha funcionado en una página diferente, parece que es lo que más me molesta.

+1

va a convertir en un objeto y luego llamar de alerta con ese objeto. Luego dice "hey, este es un objeto". Todo está funcionando como debería :) –

Respuesta

32

La función alert() solo puede mostrar una cadena de texto. Como su único parámetro, toma una cuerda o un objeto. Sin embargo, el objeto se convertirá en una cadena que se puede mostrar.

Cuando obtenga JSON a través de jQuery, el método $.ajax() automáticamente analizará el JSON y lo convertirá en un objeto de JavaScript para usted. Su variable data es por lo tanto un objeto JavaScript, y no una cadena JSON como uno podría esperar.

Dado que alert() solo puede mostrar cadenas, al intentar alertar a su objeto data, su objeto se convertirá en su representación de cadena. La representación de cadena de un objeto JavaScript es [object Object].

Para fines de depuración, puede usar console.log(data) en su lugar. Luego puede inspeccionar el objeto y su contenido a través de la consola en las herramientas de desarrollo de su navegador.

function init2() { 
    jQuery.ajax({ 
     url: "/Mobile_ReportingChain.cfm", 
     type: "POST", 
     dataType: "json", 
     async: false, 
     success: function (data) { 
      console.log(data); 
     } 
    }); 
} 

Si por alguna razón todavía quiere alertar a los JSON-datos, entonces se tendría que dar vuelta a su objeto data de nuevo en un JSON-cadena. Para ello se puede hacer uso de JSON.stringify:

alert(JSON.stringify(data)); 
+0

Eso fue rápido, y me siento tonto. Gracias a todos, fuiste el más rápido y me diste la información de console.log (data), ¡así que ganas la respuesta! – Rob

+1

@Rob ¡Aprendemos algo nuevo todos los días! –

+0

¡Después de buscar 1000 soluciones, este trabajo! ¡GRACIAS! – Nopzen

2

Así es como se supone que debe funcionar. Su JSON se convierte en un objeto javascript. A continuación, puede manipular ese objeto como un objeto javascript normal.

data.COLUMNS por ejemplo debería devolver una matriz.

10

que quiere una cadena

var obj = $.parseJSON(JSON.stringify(data)); 
+0

Esto me ayudó con un problema aparte. ¡Gracias! : D –

2

[object Object] es la representación de cadena de un objeto de javascript.

Intente acceder a las propiedades del objeto.

alert(data.COLUMNS[0]); 
4

intente enviar ese objeto a console.log. Obtendrá una imagen más clara de lo que contiene.

Además, ponga dataType: 'json' y elimine parseJSON porque es lo mismo.

+0

Sí, una vez que supe que estaba obteniendo el JSON correctamente, lo reemplacé con $ .getJSON. – Rob

2

jQuery.parseJSON convertirá la cadena json en objeto json para que la alerta (obj) le muestre [object Object] ya que es un objeto.

Si desea ver qué contiene obj, utilice console.log(obj) y luego revise el mensaje de registro de la consola.

0

$.getJSON("UI/entidades.json.php", function(data){ 
 
\t result = JSON.stringify(data); 
 
\t alert(result) 
 
\t console.log(result) 
 
})