А как насчет использования синтаксиса массива:
jsonObject.query.pages[18978754]
Кажется, работает, используя firebug:
>>> data.query.pages[18978754]
Object pageid=18978754 ns=0 title=Apple revisions=[1]
А:
>>> data.query.pages[18978754].title
"Apple"
Обратите внимание, что доступ к объекту данных с синтаксисом массива также возможен для других свойств; например:
>>> data['query'].pages[18978754].title
"Apple"
Это совершенно правильный синтаксис JS : -)
Добавлено после просмотра комментария / редактирования
Если вы не знаете идентификаторы страниц, вы можете выполнить итерацию по страницам примерно так:
for (var pageId in data.query.pages) {
if (data.query.pages.hasOwnProperty(pageId)) {
console.log(data.query.pages[pageId].title);
}
}
Обратите внимание, что я использую hasOwnProperty
, чтобы убедиться, что объект, на котором я работаю, обладает свойством, и что он не исходит от какого-либо вида наследования или чего-то подобного:
Каждый объект произошел от Объекта
наследует метод hasOwnProperty.
Этот метод может быть использован для определения
есть ли у объекта указанный
собственность как прямая собственность этого
объект; в отличие от оператора в этом
метод не проверяет
цепь прототипа объекта.
В зависимости от того, что в "revision
", вам, возможно, придется сделать то же самое и с этим, кстати ...
Надеюсь, это поможет лучше : -)
Второе редактирование, после второго набора комментариев:
Ну, немного дальше (не думаю, что вы имели в виду буквально):
data.query.pages[pageId].revisions
- это массив (обратите внимание на символы []
), который может содержать несколько объектов.
Итак, вы можете получить первый из них следующим образом:
data.query.pages[pageId].revisions[0]
Второй путь:
data.query.pages[pageId].revisions[1]
(в приведенном вами примере нет второго, кстати - так в теории ^^)
и т. Д.
Чтобы получить каждый из этих объектов, вам нужно выполнить какой-то цикл, например:
var num_revisions = data.query.pages[pageId].revisions.length;
var i;
for (i=0 ; i<num_revisions ; i++) {
console.log(data.query.pages[pageId].revisions[i]);
}
И теперь внутри этого цикла вы сможете получить свойство '*' данного объекта:
data.query.pages[pageId].revisions[i]['*']
Итак, окончательный код становится:
for (var pageId in data.query.pages) {
if (data.query.pages.hasOwnProperty(pageId)) {
var num_revisions = data.query.pages[pageId].revisions.length;
var i;
for (i=0 ; i<num_revisions ; i++) {
console.log(data.query.pages[pageId].revisions[i]['*']);
}
}
}
Используя этот код в firebug, я теперь получаю литеральное жало, которое вы ищете:
Something.....
Конечно, вы могли бы просто использовать:
for (var pageId in data.query.pages) {
if (data.query.pages.hasOwnProperty(pageId)) {
console.log(data.query.pages[pageId].revisions[0]['*']);
}
}
Что будет хорошо работать, если вы всегда хотите иметь дело только с первым элементом массива revisions
.
Просто будьте осторожны: в вашем примере была только одна ревизия; код, который я предоставил, должен быть в состоянии справиться со многими; до вас, чтобы определить, что вы хотите с ними делать; -)