2015-05-12 1 views
5

У меня есть объект JSON, который возвращается обратно, как это с API вызова JavaScript:Как получить имя массива в данных JSON с помощью JavaScript

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

Как я могу получить доступ к имени массива (т.е. myArray) в JavaScript. Мне нужно использовать имя массива для определения потока позже.

+0

Будет ли только один элемент в объекте? – thefourtheye

+0

Возможно, «ключи» в [lodash] (https://lodash.com/docs#keys) - один из хороших вариантов. – zangw

+0

@thefourtheye Может быть любое количество элементов. Я просто дал мини-версию фактического json. – ash123

ответ

2

Используйте getOwnPropertyNames, чтобы получить список свойств объекта в форме массива.

Пример:

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

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

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

Примечание: Если объект может иметь более чем одно свойство, как myArray, myInt и myOtherArray, то вам нужно перебрать результатов getOwnPropertyNames. Вам также необходимо будет выполнить типовое тестирование, как в if(names[0] instanceof Array) {...}, чтобы проверить тип свойства. Основываясь на вашем примере в вашем вопросе, я не сгладил все это.

+0

Вы считаете, что это будет первый элемент, почему? порядок ключей не гарантируется – Luis

+2

@Luis: «имя ** the ** array» на английском языке означает, что существует только один массив. Я (и, вероятно, Эд Коттрелл) не предполагаю, что это будет первый элемент; Я предполагаю, что это будет единственный элемент (который может быть или не быть правдой, но приведенные данные примера подтверждают это предположение). – Amadan

+0

Ну, в этом примере есть только одно свойство. Очевидно, что если их больше, потребуется цикл и некоторый тип тестирования. –

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

терминологии Примечание: Это решение предполагает, у вас есть объект JavaScript. Вы могли бы иметь строку JSON, в этом случае это решение:

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

Однако, «объект JSON», в JavaScript, является только один - тот, который я использовал только сейчас, что имеет JSON.parse и JSON.stringify методы. У вас есть не объект JSON, за исключением, возможно, тривиальной интерпретации второго случая, где все значения в JavaScript являются объектами, включая строки.

+0

Хорошая точка - возможность того, что это действительно строка JSON; вопрос непонятен. Это хороший ответ. –

+0

Это не сработало для меня. Когда я пытаюсь посмотреть myArray в консоли браузера dev, он показывает безымянный массив.Итак, похоже, что myArray - это просто ссылка на массив. – ash123

+0

Что значит «смотреть myArray»? Нет переменной, называемой 'myArray' для просмотра. Мой пример работает (т. Е. «Обращается к имени массива»), если структура из OP находится в переменной с именем 'data'. Если это не то, что вы хотите, уточните вопрос. – Amadan

0

Другие ответы хороши, если у вас нет контроля над форматом возврата.

Однако, если вы можете, я бы рекомендовал изменить формат возврата, чтобы поместить важные значения, которые вам нужны, вместо фактических значений вместо ключей, чтобы сделать его более понятным. Например, что-то вроде этого:

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

Тогда, это намного понятнее, чтобы надежно получить доступ к собственности, вы заботитесь о: result.name

+0

У меня нет контроля над возвращаемыми данными, так как он возвращается внешним api. – ash123

Смежные вопросы