2012-03-18 35 views
10

Tôi gửi một số yêu cầu trên máy chủ và nó trả lời tôi thế này:Làm thế nào để đọc JSON (phản hồi của máy chủ) trong 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"]]} 

tôi đã cố gắng rất nhiều nhưng không dường như làm việc cho tôi!

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

Đối với mã này, tôi nhận được "null".

Bất kỳ trợ giúp sẽ được đánh giá cao!

Trả lời

5

Nếu bạn đang cố gắng sử dụng định dạng JSON, vấn đề của bạn là dữ liệu bên trong [...] cũng cần phải theo cặp và được nhóm theo {...} như here.

Ví dụ,

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

Vì vậy, bạn có thể có:

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

Nếu máy chủ đang gửi cho bạn một cái gì đó mà bạn gọi là res, bạn chỉ có thể làm điều này để phân tích nó trong bạn Javascript:

var o=JSON.parse(res); 

Sau đó, bạn có thể chuyển qua từng trường hợp trong cùng lumns như sau:

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

cho tôi lỗi cú pháp trên dòng var o = JSON.parse (res); xin vui lòng đề nghị. Tôi đang thử với javascript đơn giản và IE8 –

3

đối tượng JSON làm việc giống như bất kỳ đối tượng javascript bình thường hoặc từ điển

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

Trong trường hợp, COLUMNS của bạn và dữ liệu đều mảng, vì vậy có vẻ như bạn đang cố gắng lấy phần tử từ dữ liệu tương ứng với phần tử "FNAME" trong 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: Nếu bạn không thể thay đổi dữ liệu ở đầu máy chủ, bạn có thể tạo mặt đối tượng của riêng mình. Điều này cũng giúp nếu bạn phải tham khảo nhiều cột (mà bạn có thể làm).

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

Chỉnh sửa khác: Câu trả lời của tôi chỉ xem xét hàng đầu tiên trong DATA, vì tôi đã đọc sai ban đầu. Tôi sẽ để nó cho bạn để tìm ra cách xử lý những người khác.

+1

Nếu bạn có một cách thay đổi định dạng mà máy chủ trả lời, để làm cho nó trông giống như những gì Nick gợi ý, tôi khuyên bạn nên làm như vậy. Các định dạng bạn đã có bây giờ là khá fugly để làm việc với. –

3

xem liên kết đó. READ JSON RESPONSE

Hoàn hảo.

+0

Bạn có tài nguyên tương tự để đọc JSON bằng PHP không? –

0

Nếu bạn đã ở đây cố gắng tìm hiểu làm thế nào để đọc từ [Response object] (như tôi đã làm) - này những gì có thể giúp: - nếu bạn sử dụng lấy đừng quên về res.json() trước khi đăng nhập giao diện điều khiển

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

Chỉ cần sử dụng JSON.parse(serverResponse)

+0

Đây là câu trả lời quá ngắn. Nó sẽ hữu ích hơn như một bình luận. Vui lòng mở rộng giải thích về giải pháp của bạn. Ví dụ, 'serverResponse' là gì? OP đã không đề cập đến một biến như vậy, và bạn không giải thích nó. –

+0

Điều này không cung cấp câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ tác giả, hãy để lại nhận xét bên dưới bài đăng của họ. - [Từ đánh giá] (/ đánh giá/bài đăng chất lượng thấp/17080918) –

Các vấn đề liên quan