大きなjsonファイルから、d3で作成されたチャートのデータと視覚化を更新できるようにしたいと考えています。データは、USDA の栄養データベースから取得されます。json ファイルはhttp://ashleyw.co.uk/project/food-nutrition-databaseから入手したもので、信じられないほど大きい (具体的には 30MB)。ロードするだけで一苦労。メモ帳 ++ は (1) 行 (約 1 分後) にすべてを読み込み、メモ帳 (約 20 秒後) は (複数行にわたって) 書式設定が不十分な状態で読み込みます。そのような大規模な Json データベースを効率的に使用することは可能ですか? ブラウザがクラッシュしたり、なんらかの読み込み遅延が発生したりしますか?
2417 次
1 に答える
2
上で述べたように、JSON を前処理して不要なものを切り取ることをお勧めします。以下は、使用しているファイルを読み取り、多くのコンテンツが除外された新しいファイルを吐き出す Node.js のサンプル スクリプトです。
この例では、説明以外のすべてのフィールドを無視し、ビタミンに関する情報のみを含めています。ルート配列にはまだ 6600 個の要素があるはずです。
このスクリプトの結果のファイルは、30 MB ではなく約 5 MB です。
var fs = require('fs');
// open the file
fs.readFile('./foods-2011-10-03.json','utf8',function(err,data){
if (err) throw err;
var output = [];
// parse the file from a string into an object
data = JSON.parse(data);
// Loop through each element
data.forEach(function(d,i){
// spit an example element into the console for inspection:
// if ( i == 0 ) console.log(d);
// decide which parts of the object you'd like to keep
var element = {
description : d.description,
nutrients : []
};
// for example here I'm just keeping vitamins
d.nutrients.forEach(function(d,i){
if ( d.description.indexOf("Vitamin") == 0 ) element.nutrients.push(d);
});
output.push(element);
})
fs.writeFile( './foods-output.json', JSON.stringify(output), function(err){
if ( err ) throw err;
console.log('ok');
})
})
于 2013-10-15T09:25:06.087 に答える