Как перебрать массив объектов, используя гобой?

У меня есть ответ 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.

Другие вопросы по тегам