2015-05-12 15 views
5

Tôi có một đối tượng JSON mà trở lại như thế này từ một Javascript gọi API:Làm thế nào để có được tên của mảng trong dữ liệu json sử dụng JavaScript

{ 
    "myArray": [ 
    { 
     "version": 5, 
     "permissionMask": 1 
    }, 
    { 
     "version": 126, 
     "permissionMask": 1 
    } 
    ] 
} 

Làm thế nào tôi có thể truy cập vào tên của mảng (tức là myArray) bằng JavaScript. Tôi cần sử dụng tên của mảng để xác định luồng sau này.

+0

Sẽ có chỉ có một phần tử trong đối tượng? – thefourtheye

+0

Có lẽ các phím 'trong [lodash] (https://lodash.com/docs#keys) là một lựa chọn tốt – zangw

+0

@thefourtheye Có thể có bất kỳ số lượng yếu tố nào. Tôi vừa đưa ra một phiên bản rút gọn của json thực tế. – ash123

Trả lời

2

Sử dụng getOwnPropertyNames để nhận danh sách thuộc tính của đối tượng dưới dạng mảng.

Ví dụ:

var myObj = { 
    "myArray": [ 
    { 
     "version": 5, 
     "permissionMask": 1 

    }, 
    { 
     "version": 126, 
     "permissionMask": 1 

    } 
    ] 
}, 
names = Object.getOwnPropertyNames(myObj); 
alert(names[0]); // alerts "myArray" 

Lưu ý: Nếu đối tượng có thể có nhiều hơn một thuộc tính, như myArray, myInt, và myOtherArray, sau đó bạn sẽ cần phải lặp trên các kết quả của getOwnPropertyNames. Bạn cũng sẽ cần thực hiện kiểm tra kiểu, như trong if(names[0] instanceof Array) {...} để kiểm tra loại thuộc tính. Dựa trên ví dụ của bạn trong câu hỏi của bạn, tôi đã không ăn thịt tất cả những điều đó ở đây.

+0

Bạn giả định nó sẽ là nguyên tố đầu tiên tại sao? thứ tự của các phím không phải là garanteed – Luis

+2

@Luis: "tên của ** mảng **" bằng tiếng Anh ngụ ý rất nhiều chỉ có một mảng. Tôi (và có khả năng là Ed Cottrell) không cho rằng đó sẽ là yếu tố đầu tiên; Tôi giả sử nó sẽ là yếu tố duy nhất (có thể có hoặc không đúng, nhưng dữ liệu ví dụ được đưa ra chứng thực giả định). – Amadan

+0

Vâng, trong ví dụ, chỉ có một thuộc tính. Rõ ràng, nếu có nhiều hơn, một vòng lặp và một số loại thử nghiệm sẽ được yêu cầu. –

3
Object.keys(data)[0] 
# => "myArray" 

Một thuật ngữ lưu ý: giải pháp này giả định bạn có một đối tượng JavaScript. Bạn có thể có một chuỗi JSON, trong trường hợp này là giải pháp:

Object.keys(JSON.parse(data))[0] 
# => "myArray" 

Tuy nhiên, "đối tượng JSON", trong JavaScript, chỉ cần một là - một trong tôi sử dụng ngay bây giờ, có JSON.parseJSON.stringify phương pháp. Những gì bạn có là không phải là một đối tượng JSON ngoại trừ có lẽ trong một diễn giải tầm thường của trường hợp thứ hai, trong đó tất cả các giá trị trong JavaScript là các đối tượng, bao gồm cả chuỗi.

+0

Điểm tốt lại khả năng rằng đây thực sự là một chuỗi JSON; câu hỏi không rõ ràng. Đây là một câu trả lời hay. –

+0

Điều này không hiệu quả đối với tôi. Khi tôi cố gắng xem myArray trong giao diện điều khiển của trình duyệt dev, nó sẽ hiển thị một mảng chưa được đặt tên.Vì vậy, có vẻ như myArray chỉ là một tham chiếu đến mảng. – ash123

+0

Ý bạn là gì, "xem myArray"? Không có biến nào gọi là 'myArray' để được theo dõi. Ví dụ của tôi hoạt động (tức là "truy cập tên của mảng") nếu cấu trúc từ OP nằm trong một biến có tên là 'dữ liệu'. Nếu đây không phải là điều bạn muốn, vui lòng làm rõ câu hỏi. – Amadan

0

Các câu trả lời khác là tốt nếu bạn không kiểm soát được định dạng trả lại.

Tuy nhiên, nếu có thể, tôi khuyên bạn nên thay đổi định dạng trả lại để đặt các giá trị quan trọng mà bạn quan tâm làm giá trị thực thay vì các khóa để làm cho nó rõ ràng hơn. Ví dụ, một cái gì đó như thế này:

result = 
{ 
    "name: "myArray", 
    "value": [ 
    { 
     "version": 5, 
     "permissionMask": 1 
    }, 
    { 
     "version": 126, 
     "permissionMask": 1 
    } 
    ] 
} 

Sau đó, nó rõ ràng hơn rất nhiều để truy cập đáng tin cậy tài sản mà bạn quan tâm: result.name

+0

Tôi không kiểm soát được dữ liệu được trả về vì nó được trả về bởi api bên ngoài. – ash123

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