Javascript 如何在NodeJs中按块解析Json数据

Javascript 如何在NodeJs中按块解析Json数据,javascript,node.js,json,asynchronous,Javascript,Node.js,Json,Asynchronous,我正在创建一个RESTAPI,它从internet获取原始数据,然后对其应用正则表达式并以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

我正在创建一个RESTAPI,它从internet获取原始数据,然后对其应用正则表达式并以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获取的函数。
首先,我使用get()获取原始数据,然后应用ANIME\u LIST\u 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]
};
}

在这个端点中,我从第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个条目),请求返回并显示数组需要很长时间
我想做的是在每次调用函数或到达端点时返回该数组的chunck。
尝试了几种方法,但没有一种是有意义的。

有人有主意吗

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

app.get(“/anime list”),异步(请求、恢复、下一步)=>{
const appData=await getAnimeList(URL\u BASE\u ANIME\u列表)
var listJson=JSON5.parse(appData.animeList)
常量from=req.query.from | 0
常量计数=req.query.count | | 100
res.json(listJson.splice(from,count))
})

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

您可以使用以下命令将大型数组拆分为一个小块。要确定块的范围,可以将查询传递给端点

app.get(“/anime list”),异步(请求、恢复、下一步)=>{
const appData=await getAnimeList(URL\u BASE\u ANIME\u列表)
var listJson=JSON5.parse(appData.animeList)
常量from=req.query.from | 0
常量计数=req.query.count | | 100
res.json(listJson.splice(from,count))
})

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

您需要JSON5,还是它实际上只是JSON?我建议您根本不要解析和重新字符串化JSON文本。只需直接发送
appData
字符串,只需确保将内容类型头设置为
res.json
does.call getAnimeList一次,而不是每次request@Bergi:是的,我能做到。但我的问题是,返回的数组是一个大数组,返回响应需要很多时间。我想知道是否有一种方法可以在每次调用函数时(例如,每次我按下按钮时,它会加载更多数据而不是整个数据)仅获取其中的一部分数据,这取决于
getAnimeList
函数,尤其是您自己从中获取数据的API是否支持这一点。但是,是的,一般来说这是可能的,它被称为“分页”。你需要JSON5吗,或者它实际上只是JSON?我建议根本不要解析和重新字符串化JSON文本。只需直接发送
appData
字符串,只需确保将内容类型头设置为
res.json
does.call getAnimeList一次,而不是每次request@Bergi:是的,我能做到。但我的问题是,返回的数组是一个大数组,返回响应需要很多时间。我想知道是否有一种方法可以在每次调用函数时(例如,每次我按下按钮时,它会加载更多数据而不是整个数据)仅获取其中的一部分数据,这取决于
getAnimeList
函数,尤其是您自己从中获取数据的API是否支持这一点。但是,是的,这在一般情况下是可能的,它被称为“分页”。我想你指的是
slice
<代码>拼接改变数组,这不是您想要的。是的,我认为我需要缓存结果以备将来请求,问题是第一个请求数据的用户(当缓存尚未填满时)必须等待很长时间。我不知道我是否可以像周期性缓存那样实现,程序本身运行函数并填充缓存(+使其保持最新)。我想你的意思是
slice
<代码>拼接改变数组,这不是您想要的。是的,我认为我需要缓存结果以备将来请求,问题是第一个请求数据的用户(当缓存尚未填满时)必须等待很长时间。我不知道我是否可以像周期性缓存一样实现,程序运行函数本身并填充缓存(+保持它最新)。