2014-05-10 2 views
0

J'ai un très gros fichier JSON (150k lignes, ~ 3mb) provenant d'une ressource externe, Je me demande quelle est la meilleure approche pour travailler avec sous l'application NodeJS.NodeJS: Très grand JSON de l'analyse des ressources distante

Ma stratégie au moment était l'obtenir avec un appel ajax, analyser et stocker dans le cache:

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); 
}); 

Mais ce que j'exprience est que cette ligne:

var JsonAsObject = JSON.parse(body); 

prend une éternité (3 minutes) et même alors l'objet n'est pas accessible en debug.

En fin de mon objectif est d'être en mesure de traiter et de ses informations,

Merci

Répondre

0

Utilisez un analyseur en continu de sorte que vous ne stockez pas tout dans la mémoire à la fois. Il peut encore prendre quelques secondes pour s'exécuter, mais au moins votre application ne stagnera pas pendant l'analyse.

Essayez 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(); 
Questions connexes