1

サーバーから phonegap アプリに大きなテキスト ファイルをダウンロードしています。テキストは、文字列形式の有効な JSON です。テキスト データをデバイスのファイル システムに書き込み、後で読み取ります。ファイルリーダーを使用してテキストデータをフェッチすると、これはうまくいくようです。問題が発生するのは、文字列 JSON を解析するときです。

2500 要素 (DB から返され、json 形式で返されるレコード) を含むテキスト ファイルをダウンロードすると、JSON.parse(stringJSON) 関数は正常に動作し、JSON オブジェクトを返しますが、サーバーから返される要素の数を増やして3000 その後、応答がありません。json 出力は正しくフォーマットされているようです。メモリの問題のようです.JSONデータは最大1.5MBです.jqueryのJSON.parseをphonegapで使用して解析するには多すぎます. このページを見て、JSON.parse の代わりに parse_json を含めてみましたが、まだ何も返されません (関連するスクリプトをページに含めました)。

var ft = new FileTransfer();

 ft.onprogress = function(progressEvent) {
    if (progressEvent.lengthComputable) {
        var perc = Math.abs(Math.floor((progressEvent.loaded / progressEvent.total) * 100));
        $loading.html(perc + " Loading...")
    } else {
        if($loading.innerHTML == "") {
            $loading.innerHTML = "Loading";
        } else {
            $loading.innerHTML += ".";
        }
    }
};

var dlPath = DATADIR_separate.fullPath + "/"+foldername_separate+".html";
ft.download("http://downloadURL", dlPath, function(){
    alert('saved');
    $loading.hide();
    remove_permanent_overlay();
}, function(){
    alert('fail');
    $loading.hide();
    remove_permanent_overlay();
});

次に、すべてのファイル リーダー コールバックの後:

function readAsText_READ(file) {
var reader = new FileReader();

reader.onloadend = function(evt) {
    alert('loaded');//this fires, so filereader is working
    //alert(evt.target.result);//this alerts even with a large string
    //var parseTarget = JSON.parse(evt.target.result);//works for smaller strings fails with larger strings
    console.log('parsing now...');
    var parseTarget = json_parse(evt.target.result);//same result as JSON.parse
    console.log(parseTarget);
    //var parseTarget = $.parseJSON( evt.target.result );
    //var parseTarget = eval( "("+evt.target.result+")" );
    //alert(parseTarget);
    alert(parseTarget["879"]);
};

reader.readAsText(file);
//reader.readAsDataURL(file)
alert('reading file: '+file);

}

*編集 phonegap の weinre デバッガーで、大きな json 文字列を読み込もうとすると、次のようになります。

parsing...
processMessage failed: Message: S01 File1238321490
s{"really long json... jsonetc..."}
processMessage failed: Error: [object Object]
processMessage failed: Stack: undefined

これらのエラーメッセージの意味がよくわからないので、調べてみます...

どんな助けでも大歓迎です。

4

1 に答える 1

1

いくつかの閉鎖のために:

ダウンロードするファイルのサイズを小さくしたところ、愚かなことに、サーバーからモバイル アプリに送信されるコンテンツをエスケープするのを忘れていたため、無効な JSON を受け取っていました。JSON の最初の数千のエントリが有効だったため、これを発見するのは困難でした。文字列の後半には不正な二重引用符がいくつかありました。

サーバーからコンテンツをエスケープし、300kb ファイルの JSON を簡単に解析できました。1MBのファイルでも問題なく動作すると確信しています。

于 2013-10-21T08:41:03.810 に答える