Во-первых, вы не имеете дело с "объектом JSON".Вы имеете дело с объектом JavaScript.JSON - это текстовая нотация, но если ваш пример кода работает ([0].amount
), вы уже десериализовали эту нотацию в граф объектов JavaScript.(То, что вы цитировали, вообще не является допустимым JSON; в JSON ключи должны быть в двойных кавычках. То, что вы указали, - это литерал объекта JavaScript, который является надмножеством JSON.)
Здесь длина этого массива равна 2.
Нет, это 3.
Итак, мне нужно получить имя (например, количество или работа ... всего четыре имени), а также подсчитать, сколько там имен?
Если вы используете среду с полной поддержкой ECMAScript5, вы можете использовать Object.keys
( spec | MDN ), чтобы получить перечислимые ключи для одного из объектов в виде массива.Если нет (или если вы просто хотите просмотреть их, а не получить их массив), вы можете использовать for..in
:
var entry;
var name;
entry = array[0];
for (name in entry) {
// here, `name` will be "amount", "job", "month", then "year" (in no defined order)
}
Полный рабочий пример:
(function() {
var array = [
{
amount: 12185,
job: "GAPA",
month: "JANUARY",
year: "2010"
},
{
amount: 147421,
job: "GAPA",
month: "MAY",
year: "2010"
},
{
amount: 2347,
job: "GAPA",
month: "AUGUST",
year: "2010"
}
];
var entry;
var name;
var count;
entry = array[0];
display("Keys for entry 0:");
count = 0;
for (name in entry) {
display(name);
++count;
}
display("Total enumerable keys: " + count);
// === Basic utility functions
function display(msg) {
var p = document.createElement('p');
p.innerHTML = msg;
document.body.appendChild(p);
}
})();
Поскольку вы имеете дело с необработанными объектами, вышеприведенный цикл for..in
работает нормально (если только кто-то не совершил грех надлома с Object.prototype
, но давайте предположимне).Но если объект, от которого вы хотите получить ключи, может также наследовать перечисляемые свойства от своего прототипа, вы можете ограничить цикл только ключами собственных объекта (а не ключами его прототипа), добавив hasOwnProperty
позвоните туда:
for (name in entry) {
if (entry.hasOwnProperty(name)) {
display(name);
++count;
}
}