首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用类型记录解析大JSON文件

使用类型记录解析大JSON文件
EN

Stack Overflow用户
提问于 2021-09-09 00:43:02
回答 2查看 783关注 0票数 0

我想使用类型记录解析/处理一个25 MB的JSON文件,并过滤/排序对象。我编写的代码花费了几分钟(有时甚至超时),不确定为什么会发生这种情况,或者是否有其他方法可以提高代码的效率。

注意:代码工作在一个小文件

代码语言:javascript
复制
import fs from 'fs';
searchAccounts(): Promise<Account[]> {
       const accountSearchCriteria: AccountSearchCriteria = {
                country: 'NZ',
                mfa: 'SMS',
                name: 'TEST',
                sortField: 'dob'
        };
        const jsonPath = './src/file.json';
        const rawAccounts = fs.readFileSync(jsonPath, 'utf-8');
        let accounts: Account[] = JSON.parse(rawAccounts);
        if (accountSearchCriteria) {
            if (accountSearchCriteria.name) {
                accounts = accounts.filter(
                    account =>
                        account.firstName.toLowerCase() ===
                            accountSearchCriteria.name.toLowerCase() ||
                        account.lastName.toLowerCase() ===
                            accountSearchCriteria.name.toLowerCase()
                );
            }
            if (accountSearchCriteria.country) {
                accounts = accounts.filter(
                    account =>
                        account.country.toLowerCase() ===
                        accountSearchCriteria.country.toLowerCase()
                );
            }
            if (accountSearchCriteria.mfa) {
                accounts = accounts.filter(
                    account => account.mfa === accountSearchCriteria.mfa
                );
            }
            if (accountSearchCriteria.sortField) {
                accounts.sort((a, b) => {
                    return a[accountSearchCriteria.sortField] <
                        b[accountSearchCriteria.sortField]
                        ? -1
                        : 1;
                });
            }
            return accounts;
        }
        return accounts;
}
EN

回答 2

Stack Overflow用户

发布于 2021-09-09 01:40:42

由于您的数据大小是25 MB,您应该使用一个更节省内存的排序算法.

您可以尝试使用循环排序。

循环排序 --您可以在这里找到一个实现,并在代码中使用它来查看是否存在差异。

票数 0
EN

Stack Overflow用户

发布于 2021-09-09 07:38:23

Node.js是单线程的,如果您的代码阻塞线程很长一段时间,它会给您一个超时错误。您的代码有两个问题。

  1. 您使用的是fs.readFileSync(jsonPath, 'utf-8');,它是一个异步函数,在读取文件时阻塞线程。使用替代fs.readFile('./Index.html', callback)
代码语言:javascript
复制
const fs = require('fs');
fs.readFile('./Index.html', function read(err, data) {
   if (err) {
       throw err;
   }
   console.log(data);
});
  1. 排序数据也是一种线程阻塞任务,尝试一种不同的排序技术,这种方法在很长一段时间内不会占用线程。

注意: Node.js不适合以CPU为中心的任务,例如排序、图像处理等,它很适合I/O任务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69111018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档