NodeJS:来自远程资源解析的非常大的JSON

时间:2014-05-10 13:35:02

标签: javascript ajax json node.js

我有一个来自外部资源的非常大的JSON文件(150k行,~3mb), 我想知道在NodeJS应用程序下使用它的最佳方法是什么。

我目前的策略是通过ajax调用获取它,解析它并将其存储在缓存中:

var options = {
host: url,
port: port,
path: '/file.json',
headers: {'Authorization': 'Basic ' + new Buffer(username + ':' +password).toString('base64')
    }
};

http.get(options, function (res) {
    var body = '';

    res.on('data', function (chunk) {
        body += chunk;
    });

    res.on('end', function () {
        var JsonAsObject = JSON.parse(body);
        StatisticsCache.set("Json", JsonAsObject, function(err, success) {
           console.log("err is " + err + "success is " + success);
        });
    })
}).on('error', function (e) {
    console.log("Got error: ", e);
});

但我的经验是这一行:

var JsonAsObject = JSON.parse(body);

永远(3分钟),即使这样,在调试中也无法访问该对象。

最终我的目标是能够并处理它的信息,

由于

1 个答案:

答案 0 :(得分:1)

使用流解析器,这样您就不会立即将所有内容存储在内存中。它可能仍然需要几秒钟才能运行,但至少你的应用程序在解析时不会停止。

尝试JSONStream

var request = require('http').request,
    parseUrl = require('url').parse,
    JSONStream = require('JSONStream');

var url = parseUrl('…');
url.method = 'GET';

var req = request(url, function (res) {
  res.pipe(JSONStream.parse()).on('data', function (obj) {
    console.log(obj);
  });
});
req.end();