Как перебрать массив объектов, используя гобой?
У меня есть ответ JSON в виде:
[{
"id": 425055,
"title": "Foo"
}, {
"id": 425038,
"title": "Bar"
}, {
"id": 425015,
"title": "Narf"
}]
Я использую oboe.js для создания высокогорного потока:
const cruiseNidStream = _((push, next) => {
oboe({
url: 'http://fake.com/bar/overview,
method: 'GET',
headers: {
'X-AUTH': 'some token',
},
}).node('.*', (overview) => {
// I expect here to get an object having and id, title property
push(null, overview.id);
}).done((overview) => {
push(null, _.nil);
}).fail((reason) => {
console.error(reason);
push(null, _.nil);
});
});
Моя проблема в том, что я не знаю, какой шаблон использовать узел, чтобы он соответствовал каждому элементу этого массива. Поскольку в настоящее время элементы, которые я получаю с текущей настройкой, это все объекты и свойства снова:
425055
Foo
{ id: 227709, title: 'Foo' }
Если бы ответ имел свойство, подобное:
{
'overview': [],
}
Я мог бы использовать .overview.*
,
2 ответа
У гобоя есть два способа сопоставления данных: по пути и по типу утки.
Набирая утку
oboe('/data.json')
.node('{id title}', function(x) {
console.log('from duck-typing', x)
})
По пути
oboe('/data.json')
.node('!.*', function(x) {
console.log('from path matching', x)
})
//or also valid
.node('!.[*]', function(x) {
console.log('from path matching', x)
})
В примере пути обратите внимание на !
персонаж. Это относится к корневому узлу дерева, этот шаблон будет содержать только три ваших объекта, а не их собственные свойства, вложенные дальше вниз.
Я сделал gomix, где вы можете просмотреть это, работая в консоли, а также просмотреть исходный код.
Oboe.js поддерживает утку:
.node('{id title}', (overview) => {
}
Обратите внимание, что мой JSON был плоским, так что это работает. Ваш результат может отличаться для вложенного JSON.