Запросы модулей JSON Stream Npm - PullRequest
0 голосов
/ 08 мая 2019

Я работаю с большими данными JSON и использовал потоковый модуль Json в своих Nodejs для получения значений.

Это моя структура JSON, мне нужно проанализировать и собрать 4 или 5 значений как из метаданных, так и из элементов состояния. У меня есть 5 элементов в массиве JSON.

enter image description here

request({url:'ssss',verify:'False',headers:{'Authorization':'Bearer zzzz','Accept':'application/json','User-Agent':'zzz'}})
  .pipe(JSONStream.parse('items'))
  .pipe(es.mapSync(function (data) {
    console.log("Data "+data);
    console.log("Stringify "+ JSON.stringify(data));
   var specificValue = JSON.stringify(data);
    console.log("Specific Value"+ specificValue[0].metadata.labels.app);
    console.log("Parse and Stringify "+ JSON.parse(JSON.stringify(data)));
  })) ;

В console.log Data я могу видеть 5 объектов как [object Object],[object Object],[object Object],[object Object],[object Object]

В console.log Stringify я вижу только часть (1 элемент) данных JSON, я не вижу все 5 элементов.

В console.log Specific Value Я вижу TypeError: Cannot read property 'labels' of undefined. Там отображается элемент метки журнала и по запросу specificValue[0].metadata.labels.app работают другие тестеры JSONPath.

Как можно проанализировать и получить конкретное значение даже после использования модуля JSON Stream?

В идеале я хотел бы сделать цикл for и получить все значения.

В console.log Parse and Stringify Я получаю [object Object],[object Object],[object Object],[object Object],[object Object]

1 Ответ

0 голосов
/ 08 мая 2019

Закомментируйте строку, которая вызывает ошибку, и вы увидите, что функция (данные) фактически вызывается для каждого элемента в массиве 'items'. Ошибка внезапно завершает ваш скрипт.

Каждый элемент, соответствующий JSONStream.parse ('items'), будет отправлен через поток. Таким образом, es.mapSync будет вызываться несколько раз. Переменная data на самом деле будет items [0] при первом вызове, items [1] при втором вызове и т. Д.

Попробуйте зарегистрировать что-нибудь для каждого элемента, например, используйте это:

request({url:'ssss',verify:'False',headers:{'Authorization':'Bearer zzzz','Accept':'application/json','User-Agent':'zzz'}})
  .pipe(JSONStream.parse('items'))
  .pipe(es.mapSync(function (data) {
    console.log(data.metadata.labels.app);
}));
...