0

我正在处理一个大的 JSON 数据,并在我的 Nodejs 中使用 Json 流模块来获取值。

这是我的 JSON 结构,我必须从元数据和状态元素中解析和收集 4 或 5 个值。我在 JSON 数组中有 5 个元素。

在此处输入图像描述

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我只能看到 JSON 数据的一个块(1 个元素)中,我没有看到所有 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]

4

1 回答 1

0

注释掉引发错误的行,您将看到函数(数据)实际上是为 'items' 数组中的每个元素调用的。该错误会突然终止您的脚本。

JSONStream.parse('items') 匹配的每个元素都将通过流发送。因此,es.mapSync 将被多次调用。“数据”变量在第一次调用时实际上是 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);
}));
于 2019-05-08T18:00:02.213 回答