2012-07-13 41 views
5

Máy chủ trả về mảng đối tượng trong JSON. Có vẻ như vậy:JSON.parse cho mảng đối tượng

{"d":"[ 
    {\"Id\":1,\"IsGood\":true,\"name1\":\"name1dsres\",\"Name2\":\"name2fdsfd\",\"name3\": \"name3fdsgfd\",\"wasBorn\":\"\\/Date(284011000000)\\/\"}, 
    {\"Id\":2,\"IsGood\":false,\"name1\":\"fdsfds\",\"name2\":\"gfd3im543\",\"name3\":\"3543gfdgfd\",\"WasBorned\":\"\\/Date(281486800000)\\/\"} 
]"} 

Tôi cần phải phân tích cú pháp bằng cách sử dụng hàm JSON.parse. Tôi đang làm điều này theo cách này:

function myFunction(dataFromServer){ 
     var parsedJSON = JSON.parse(dataFromServer.d); 
     for (var item in parsedJSON.d) { 
      // how do I get the fields of current item? 
     } 

Mã này không hoạt động, nó sẽ trả không xác định

for (var item in parsedJSON) { 
     alert(item.Id); 
} 
+0

và whats câu hỏi của bạn ?? – Jashwant

+0

Giả sử 'dataFromServer' chứa dữ liệu bạn đã đăng và bạn đã phân tích cú pháp nó, sau đó' parsedJSON' đã là một mảng, nó không có thuộc tính 'd'. Nếu bạn muốn biết cách truy cập các thuộc tính của các đối tượng, hãy xem https://developer.mozilla.org/en/JavaScript/Guide/Working_with_Objects –

+1

Về cập nhật của bạn: Đó không phải là cách bạn lặp qua các mảng. Hãy xem liên kết sau để hiểu 'cho ... trong ': https://developer.mozilla.org/en/JavaScript/Reference/Statements/for...in. Sử dụng vòng lặp 'for' bình thường để lặp qua mảng. –

Trả lời

6

này hoạt động hoàn hảo

function myFunction(dataFromServer){ 
     var parsedJSON = JSON.parse(dataFromServer.d); 
     for (var i=0;i<parsedJSON.length;i++) { 
      alert(parsedJSON[i].Id); 
     } 
} 

Nhưng điều này doens't

function myFunction(dataFromServer){ 
      var parsedJSON = JSON.parse(dataFromServer.d); 
      for (var item in parsedJSON) { 
       alert(item.Id); 
     } 
} 
+2

Và nó không nên. Cấu trúc 'for - in' dùng để lặp qua các thuộc tính đối tượng, không phải trên các phần tử mảng (như bạn có thể làm trong PHP hoặc Python). JS cần một vòng lặp gia tăng để lặp các mảng. –

+0

'cho (chỉ mục trong mảng) { var value = array [index]; } ' – Alex

2

Bạn chỉ có thể truy cập chúng như bạn làm bất kỳ đối tượng:

var id = item.Id; 
if (item.IsGood) { ... } 

Nếu bạn muốn liệt kê chúng để sử dụng bằng cách nào đó, hãy xem this SO question.

0

Bạn có thể truy cập chúng như bạn làm đối tượng javascript oridinary, đó là một trong hai như item.id hoặc item['id']

+0

Làm cách nào để thực hiện việc này? –

+0

Bên trong vòng lặp (vòng lặp bình thường, không phải cho mỗi vòng), nơi bạn viết câu hỏi, bạn nhận được đối tượng và chỉ truy cập đối tượng bằng cách sử dụng ký hiệu chấm hoặc truy cập nó như bản đồ. Nhưng như @Rab Nawas nhận thấy giá trị của d không phải là một mảng mà là một chuỗi của một mảng. Điều này có nghĩa là bạn phải phân tích cú pháp nó thành một đối tượng JSON trước khi truy cập các phần tử trong mảng. –

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