0

大きなjsonファイルから、d3で作成されたチャートのデータと視覚化を更新できるようにしたいと考えています。データは、USDA の栄養データベースから取得されます。json ファイルはhttp://ashleyw.co.uk/project/food-nutrition-databaseから入手したもので、信じられないほど大きい (具体的には 30MB)。ロードするだけで一苦労。メモ帳 ++ は (1) 行 (約 1 分後) にすべてを読み込み、メモ帳 (約 20 秒後) は (複数行にわたって) 書式設定が不十分な状態で読み込みます。そのような大規模な Json データベースを効率的に使用することは可能ですか? ブラウザがクラッシュしたり、なんらかの読み込み遅延が発生したりしますか?

4

1 に答える 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 に答える