0

流响应的形式为

[{
  "id":0,
  "name":name0
}
,
{
  "id":1,
  "name":name1
}
]

如果我使用node-fetch流功能来获取,迭代response.body,块数据被随机切割对象。我无法解析它。我猜node-fetch不支持 json 数组,并且无法识别[, ].

如何处理json的流式数组?或任何其他 3rd 方库?示例代码:

const fetch = require('node-fetch');

async function main() {
  const response = await fetch(url);
  try {
    for await (const chunk of response.body) {
      console.log('----start')
      console.dir(JSON.parse(chunk.toString()));
      console.log('----end')}
  } catch (err) {
    console.error(err.stack);
  }
}

main()
4

1 回答 1

1

流式解析外部 JSON 源的一种方法是结合node-fetchstream-json解析传入的数据,而不管(字符串)数据是如何分块的。

import util from "util";
import stream from "stream";
import StreamArray from "stream-json/streamers/StreamArray.js";
import fetch from "node-fetch";

const response = await fetch(url);

await util.promisify(stream.pipeline)(
  response.body,
  StreamArray.withParser(),
  async function( parsedArrayEntriesIterable ){
    for await (const {key: arrIndex, value: arrElem} of parsedArrayEntriesIterable) {
      console.log("Parsed array element:", arrElem);
    }
  }
)

stream.pipeline()需要async functionNodeJS >= v13.10

于 2021-08-12T05:37:49.597 回答