2012-03-18 18 views
10

przesyłam jakiś wniosek na serwerze i jest mi odpowiedzieć to:Jak odczytać JSON (odpowiedź serwera) w 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"]]} 

Próbowałem dużo, ale nic nie wydaje się do pracy dla mnie!

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

Dla tego kodu otrzymuję "zerowy".

Każda pomoc zostanie doceniona!

Odpowiedz

5

Jeśli próbujesz użyć formatu JSON, problem polega na tym, że dane w obrębie [...] również muszą być w parach i zgrupowane w {...}, takie jak here.

Na przykład

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

Więc może masz:

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

Jeśli serwer wysyła ci coś, co nazywasz res, można po prostu to zrobić, aby przetworzyć go w JavaScript:

var o=JSON.parse(res); 

Można następnie przechodzić przez kolejne wystąpienia w ramach lumns jak następuje:

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

podając błąd składniowy na linii var o = JSON.parse (res); proszę zasugeruj. Próbuję z prostym javascript i IE8 –

3

obiekty JSON pracować tak jak każdy normalny obiektów JavaScript lub słowników

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

w twoim przypadku, kolumny i dane są obydwie tablice, więc wygląda na to, że próbujesz pobrać element z danych odpowiadających elementowi "FNAME" w kolumnach?

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

EDYCJA: Jeśli nie można zmienić danych na końcu serwera, można utworzyć własną stronę klienta obiektu. Pomaga to również, jeśli musisz odwołać się do wielu kolumn (co prawdopodobnie robisz).

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

Więcej edit: Moje odpowiedzi brać pod uwagę tylko pierwszy wiersz w DANYCH, bo misread pierwotnie. Zostawię to tobie, aby dowiedzieć się, jak przetworzyć pozostałe.

+1

Jeśli masz sposób na zmianę formatu serwer odpowiada, aby wyglądać bardziej jak to, co sugeruje Nick, polecam. Format, który masz teraz, jest dość odważny do pracy. –

3

Zobacz ten link. READ JSON RESPONSE

Jest doskonały.

+0

Czy masz podobne zasoby do czytania JSON za pomocą PHP? –

0

jeśli masz tutaj próbuje dowiedzieć się, jak czytać z [Response object] (jak ja) - to co może pomóc: - jeśli używasz pobrać nie zapomnij o res.json() przed zalogowaniem w konsoli

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

Po prostu użyj JSON.parse(serverResponse)

+0

To jest zbyt krótka odpowiedź. Będzie bardziej przydatny jako komentarz. Proszę rozwinąć wyjaśnienie swojego rozwiązania. Na przykład czym jest 'serverResponse'? PO nie wspomniał o takiej zmiennej, a ty jej nie wyjaśniasz. –

+0

Nie zapewnia to odpowiedzi na pytanie. Aby skrytykować lub poprosić o wyjaśnienie od autora, pozostaw komentarz pod swoim postem. - [Z recenzji] (/ opinia/niskiej jakości-posts/17080918) –

Powiązane problemy