如何在NodeJ中按块解析Json数据

时间:2019-11-30 20:36:32

标签: javascript node.js json asynchronous

我正在创建一个REST API,该API可从互联网获取原始数据,然后对其应用REGEX并以JSON格式返回。

这是我用于将数据作为JSON获取的功能。
首先,我使用了get()来获取原始数据,然后我将ANIME_LIST_REGEX.exec()应用于使用正则表达式进行过滤以使其成为JSON格式。

async function getAnimeList(url) {
const {body} = await got(url);

let ANIME_LIST_DATA = ANIME_LIST_REGEX.exec(body)

if (!ANIME_LIST_DATA) {
    return null;
}

return {
    animeList: ANIME_LIST_DATA[1]
};

}

在这个端点中,我要从第一个函数中检索数据并解析JSON,并将其作为响应返回。

app.get('/anime-list', async (req, res, next) => {
    const appData = await getAnimeList(URL_BASE_ANIME_LIST);
    var listJson = JSON5.parse(appData.animeList)
    res.json(listJson)
})

问题是返回的数组很大(js对象有5000个条目),请求需要很长时间才能返回并显示该数组
我想做的是每次调用函数或到达端点时都返回该数组的块。
尝试了几种方法,但没有一种方法有意义。
有人知道吗?

1 个答案:

答案 0 :(得分:0)

您可以使用Array.prototype.splice()将大数组拆分为小块。要确定块的范围,可以将查询传递给端点。

app.get("/anime-list", async (req, res, next) => {
  const appData = await getAnimeList(URL_BASE_ANIME_LIST)
  var listJson = JSON5.parse(appData.animeList)

  const from = req.query.from || 0
  const count = req.query.count || 100
  res.json(listJson.splice(from, count))
})

但是,正如其他人提到的那样,每个请求调用getAnimeList()会导致另一个性能问题。我强烈建议您重构该函数以缓存结果。