2012-03-18 4 views
10

Sto trasmettendo alcune richieste su un server e sono io rispondere a questa:Come leggere JSON (risposta del server) in 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"]]} 

Ho provato un sacco, ma nulla sembra lavorare per me!

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

Per questo codice ottengo "null".

Qualsiasi aiuto sarebbe apprezzato!

risposta

5

Se si sta tentando di utilizzare il formato JSON, il problema è che i dati all'interno dello [...] devono anche essere in coppia e raggruppati in {...} come here.

Per esempio,

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

Così si potrebbe avere:

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

Se il server che si sta inviando una cosa che si fa riferimento a come res, si può solo fare questo per analizzare nel vostro Javascript:

var o=JSON.parse(res); 

È quindi possibile scorrere ciascuna istanza all'interno di co lumns piace segue:

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

concedermi l'errore di sintassi sulla riga var o = JSON.parse (res); per favore suggerire Sto provando con javascript e IE8 –

3

oggetti JSON funzionano come qualsiasi oggetti JavaScript normali o dizionari

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

nel tuo caso, le colonne ed i dati sono entrambi gli array, così sembra che tu stia cercando di ottenere l'elemento dai dati che corrispondono all'elemento "FNAME" in COLUMNS?

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: Se non è possibile modificare i dati sul lato server, è possibile rendere il proprio lato client oggetto. Questo aiuta anche se devi fare riferimento a più colonne (che probabilmente fai).

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); 

più Modifica: Le mie risposte in considerazione solo la prima riga DATI, perché ho letto male in origine. Lascerò a te decidere come elaborare gli altri.

+1

Se hai un modo di modificare il formato che risponde il server, per far sembrare più simile a quello che Nick suggerisce, lo consiglio. Il formato che hai ora è abbastanza fugace con cui lavorare. –

3

vedere quel link. READ JSON RESPONSE

E 'perfetto.

+0

Hai una risorsa simile per leggere JSON usando PHP? –

0

Se è arrivato qui cercando di scoprire come leggere da [Response object] (come ho fatto io) - questo ciò che può aiutare: - se si usa prendere non dimenticare res.json() prima di accedere console

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

Basta usare JSON.parse(serverResponse)

+0

Questa è una risposta troppo breve. Sarà più utile come commento. Per favore espandi la spiegazione della tua soluzione. Ad esempio, qual è 'serverResponse'? L'OP non ha menzionato una variabile del genere e non la spieghi. –

+0

Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti da un autore, lascia un commento sotto il loro post. - [Dalla recensione] (/ recensione/post di bassa qualità/17080918) –