2012-03-18 19 views
10

Estoy enviando alguna solicitud en un servidor y es responda yo esto:¿Cómo se lee JSON (respuesta del servidor) en Javascript?

{"COLUMNS":["REGISTRATION_DT","USERNAME","PASSWORD","FNAME","LNAME","EMAIL","MOBILE","FACEBOOK_ID"],"DATA":[["March, 17 2012 16:18:00","someuser",somepass,"somename","somesur","someemail",sometel,"someid"]]} 

he intentado mucho, pero nada parece trabajar para mí!

var xml2 = this.responseData; 
var xml3 = xml2.getElementsByTagName("data"); 
Ti.API.log(xml3.FNAME); 

Para este código me sale "nulo".

¡Cualquier ayuda sería apreciada!

Respuesta

5

Si usted está tratando de utilizar el formato JSON, el problema es que los datos dentro del [...] también tiene que ser de dos en dos, y se agrupan en {...} como here.

Por ejemplo,

{ 
     "sales": [ 
     { "firstname" : "John", "lastname" : "Brown" }, 
     { "firstname" : "Marc", "lastname" : "Johnson" } 
     ] // end of sales array 
    } 

lo que podría tener:

{"COLUMNS": [ 
    {"REGISTRATION_DT" : "19901212", "USERNAME" : "kudos", "PASSWORD" : "tx91!#1", ... }, 
    {"REGISTRATION_DT" : "19940709", "USERNAME" : "jenny", "PASSWORD" : "fxuf#2", ... }, 
    {"REGISTRATION_DT" : "20070110", "USERNAME" : "benji12", "PASSWORD" : "rabbit19", ... } 
] 
} 

Si el servidor que está enviando algo que se refieren como res, sólo puede hacerlo a analizarlo en su Javascript:

var o=JSON.parse(res); 

Puede pasar por cada instancia en co lumns como sigue:

for (var i=0;i<o.COLUMNS.length;i++) 
{ 
     var date = o.COLUMNS[i].REGISTRATION_DT; .... 
} 
+0

dándome error de sintaxis en línea var o = JSON.parse (res); Por favor recomiende. Lo intento con javascript e IE8 simples –

3

objetos JSON funcionan igual que los objetos JavaScript normales o diccionarios

// You can do it this way 
var data = this.responseData["DATA"] 
// Or this way 
var data = this.responseData.DATA 

En su caso, las columnas y los datos son ambas matrices, por lo parece que estás tratando de obtener el elemento de los datos que corresponden al elemento "FNAME" en COLUMNAS?

var columns = this.responseData["COLUMNS"]; 
var data = this.responseData["DATA"][0]; 

for(var i=0; i<columns.length; i++){ 
    if(columns[i] == "FNAME"){ 
     Ti.API.log(data[i]); 
    } 
} 

EDIT: Si no puede cambiar los datos en el extremo del servidor, puede hacer su propio lado del cliente objetivo. Esto también ayuda si tiene que referirse a múltiples columnas (lo cual probablemente haga).

var columns = this.responseData["COLUMNS"]; 
var data = this.responseData["DATA"][0]; 
var realData = {}; 

for(var i=0; i<columns.length; i++){ 
    realData[columns[i]] = data[i]; 
} 

// Now you can access properties directly by name. 
Ti.API.log(data.FNAME); 

Más de edición: Mis respuestas sólo tienen en cuenta la primera fila de datos, ya que leí mal en un principio. Dejaré que tú decidas cómo procesar a los demás.

+1

Si tiene una forma de cambiar el formato que responde el servidor, para que se vea más como lo que Nick sugiere, lo recomiendo. El formato que tienes ahora es bastante feo para trabajar. –

3

ver ese enlace. READ JSON RESPONSE

Es perfecto.

+0

¿Tiene un recurso similar para leer JSON utilizando PHP? –

0

, si tienes aquí tratando de encontrar la manera de leer a partir [Response object] (como yo) - esto lo puede ayudar: - si utiliza ir a buscar no se olvide de res.json() antes de iniciar sesión en la consola

fetch(`http://localhost:3000/data/${hour}`, { 
     method: 'get' 
    }) 
    .then(res => { 
     return res.json() 
     }) 
    .then((response) => { 
     console.log('res: ' + JSON.stringify(response)) 
    }) 
-1

Solo use JSON.parse(serverResponse)

+0

Esta es una respuesta demasiado corta. Será más útil como comentario. Por favor expanda la explicación de su solución. Por ejemplo, ¿qué es 'serverResponse'? El OP no mencionó esa variable, y usted no la explica. –

+0

Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación. - [De la crítica] (/ review/low-quality-posts/17080918) –

Cuestiones relacionadas