2010-11-20 30 views
6

Tôi có một tệp json với nội dung như thế này:giá trị Index của Array

{ 
    "aaa":{ 
     "status":"available", 
     "classkey":"dotnet" 
    }, 
    "bbb":{ 
     "ccc":{ 
      "com":"available", 
      "net":"available", 
      "info":"available", 
      "org":"available" 
      } 
    } 
} 

Bây giờ tôi muốn lấy giá trị của mảng theo chỉ số (ví dụ, xxx[0] như thế này không thích xxx['aaa'].). Làm thế nào để làm điều đó?

+1

Có thể nếu bạn giải thích lý do tại sao bạn muốn thực hiện theo cách này, chúng tôi có thể giúp bạn tìm ra giải pháp tốt hơn. – Alex

Trả lời

13

Bạn không thể. Lệnh không được bảo đảm trong json và hầu hết các cấu trúc dữ liệu khóa-giá trị khác. Hơn nữa bạn không có một mảng, bạn có một đối tượng. Tại sao nên sử dụng các cặp giá trị tên tất cả nếu bạn không sử dụng các tên để truy cập các giá trị? Trong đó có sức mạnh của json và các kho dữ liệu quan trọng khác. Nếu bạn cần để truy cập các giá trị theo chỉ số nguyên, thì chỉ cần sử dụng một mảng để lưu trữ dữ liệu của bạn.

+3

+1 Nhưng ... chính bản thân JSON có cấm nghiêm cấm việc đặt hàng (nó không đảm bảo nó, nhưng nó * được * bảo quản trong định dạng dây, nếu một người được ngớ ngẩn dựa vào một thế hệ định hình như vậy)? Tôi tưởng tượng rằng đó là việc thực hiện mà không đảm bảo nó ... anyway ... chỉ là một ramble ngớ ngẩn. –

3

Bạn không có mảng, bạn có một đối tượng. Như vậy, bạn không thể mong đợi các khóa được theo cùng thứ tự trên tất cả các hệ thống. Lặp lại đối tượng khi các đối tượng được dự kiến ​​sẽ được lặp lại, nghĩa là, trên các khóa bạn được cung cấp.

1

Sử dụng cho ... trong cấu trúc, và sau đó sử dụng cú pháp mảng. Đây là một ví dụ.

for (var key in xxx) { 
    document.write(xxx[key]); 
} 
+0

'i' vẫn đề cập đến tên khóa, ngay cả khi bạn đặt tên là' i'. :) – Alex

0

Không bao giờ sử dụng JSON, nhưng theo http://labs.adobe.com/technologies/spry/samples/data_region/JSONDataSetSample.html#Example1, bạn có thể tạo một mảng được sắp xếp. Chỉ cần xóa khóa và dấu hai chấm trong cặp khóa-giá trị của bạn. (Ai đó xin vui lòng cho tôi biết liệu điều này hoạt động - nó có thể phụ thuộc vào các giá trị được xác định trong tất cả các đối tượng, hoặc nó có thể cho phép các cột null).

0

Có thể điều này có thể giải quyết được sự cố của bạn.

Sử dụng jQuery bạn có thể chuyển đổi JSon thành Array và truy cập nó theo chỉ mục.

var data = $.parseJSON(msg.d ? msg.d : msg); 
alert(data[1].status) 
8

Trên thực tế bạn có thể sử dụng int chỉ số giống như một mảng trong JSON, chỉ cần thử rằng:

var jsonObject = { 
    "0":{ 
     "status":"available", 
     "classkey":"dotnet" 
    }, 
    "1":{ 
     "ccc":{ 
      "com":"available", 
      "net":"available", 
      "info":"available", 
      "org":"available" 
      } 
    } 
} 

alert(jsonObject[0].status) 
+0

Điều này đã giúp tôi điều trị, cảm ơn! – martinedwards

+0

@Xdevelop Bạn có thể vui lòng cung cấp một tập lệnh PHP với vòng lặp while để tạo một mảng như thế này không? –

0

Vì mục đích cung cấp một câu trả lời cho tiêu đề câu hỏi, đây là cấu trúc mảng đó sẽ phục vụ mục đích ban đầu:

[ 
    { 
     "status":"available", 
     "classkey":"dotnet" 
    }, 
    { 
     "ccc":{ 
      "com":"available", 
      "net":"available", 
      "info":"available", 
      "org":"available" 
      } 
    } 
] 

Vì vậy, chỉ cần thay thế dấu ngoặc nhọn bằng [] để lấy mảng thay vì đối tượng. Đây là demo. Xem http://www.json.org/http://www.json.com/.

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