【发布时间】:2021-10-23 12:34:08
【问题描述】:
json文件结构如下:
{
"products": [
{
"id": 6672129786814,
"title": "rhPQbUW2fK5bhVCFuNFPsBGdolZYYcJ9gp4D4gskBHCOmGWb54",
"variants":[{...},{...}],
....
},{
"id": 6672129786824,
"title": "yuhPQbUW2fK5bhVCFfgdfgdfsglZYYcJ9gp4D4gskBHCOmGWb54",
"variants":[{...},{...}],
....
},{
"id": 6672129786842,
"title": "dfgUW2fK5bhVCFuNfgdsfgolZYYcJ9gp4D4gskBHCOmGWb54",
"variants":[{...},{...}],
....
},{
"id": 6672129786935,
"title": "aayuy44fK5bhVCFuNFPsBGdolZYYcJ9gp4D4gskBHCOmGWb54",
"variants":[{...},{...}],
....
}]
}
在这个 json 文件中可以有 500000 个对象。我需要在 product_id 上搜索产品基础。
我知道我们可以使用流式传输来读取文件,而且它也可以正常工作。它给了我作为 json 文件的所有对象的结果。但是现在我需要在 product_id 上搜索特定的产品基础。
在这里,我知道在获取所有产品期间,我可以使用循环迭代并搜索特定产品。但我不认为这是一种有效的搜索方式。
我正在寻找在读取文件期间根据 id 的值搜索特定对象的解决方案,以便我可以快速搜索并获取该特定对象,而不是一次获取所有对象然后迭代和然后匹配 id 并获取该对象。
var data = ''
var reader_stream = fs.createReadStream(file_path) //Create a readable stream
reader_stream.setEncoding('UTF8')
reader_stream.on('data', function(chunk) {
data += chunk
})
reader_stream.on('end',function() {
const products = JSON.parse(data)
resolve(products)
})
reader_stream.on('error', function(err) {
console.log(err.stack)
reject(err.stack)
})
如果我使用块,它不确定它是否考虑对象的完整对象[因为它是块]。那么我应该如何逐个对象读取数据对象? 任何人都可以提供我可以快速获取特定对象的解决方案吗?
【问题讨论】:
-
你可以检查你当前的块是否有右花括号。
-
上面显示的示例对象只是示例,它包含子对象,因此在这种情况下关闭大括号将不起作用
-
您是否从某种数据库中获取 500000 个产品?
-
这只是一个关于从文件中获取/搜索大数据的模拟测试。所以那里没有使用数据库
标签: javascript node.js json object fs