在node.js中处理大型json数组

时间:2017-11-10 13:32:24

标签: javascript arrays json node.js

我使用axios从API获取数据,然后使用我的node.js应用程序中的数据。 数据是300个对象的数组,如下所示:

{
  'location': 'us',
  'date': '156565665',
  'month': '5.1',
  'day': '6',
  'type': 'default',
  'count': '7',
  'title': 'good',
  'filter': 'no',
  'duration': 'short',
  'options': 'no',
}

获得这个对象数组后,我需要转换每个对象:用新的替换它的键并将一些值转换为正确的数据类型(string to float):

{
  'loc': 'us',
  'date_new': parseInt('156565665'),
  'month': parseFloat('5.1'),
  'day': parseInt('6'),
  'type': 'default',
  'count': parseInt('7'),
  'title': 'good',
  'filter': 'no',
  'duration': 'short',
  'options': 'no',
}

现在我只是使用for循环,并在每次迭代中转换每个对象的键和值。但是会有成千上万个像这样的对象。它将成为处理这些数据的工作者。在node.js中处理它们的最佳方法是什么?

我将使用一些现成的队列,如蜜蜂队列或resque,但即使在这种情况下,最好使代码" node.js方式"这个对象数组的处理不会减慢节点循环。也许用 将每个对象推送到promises数组并将它们放到Promise.all()中(但Promise.all()中会有300个promise)?在node.js中进行这种硬计算的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

  

但是会有成千上万个像这样的对象。这将是一个   工人处理这些数据。处理它们的最佳方法是什么   在node.js?

我会推荐

示例

var request = require('request')
  , JSONStream = require('JSONStream')
  , es = require('event-stream')

request({url: 'URL'})
  .pipe(JSONStream.parse('rows.*'))
  .pipe(es.mapSync(function (data) {
    console.error(data)
    return data
  }))
  • 解析后,将它们存储在数据库中,而不是立即处理它们,因为对大型对象的硬计算将阻止Nodej上的处理。

  • 从数据库中逐一挑选它们以进行处理。