AJAX呼び出しを行ってJSONデータを取得し、300MB + JSON文字列を返すとします。ダウンロードが終了したら、私はそれを解析する必要があります。クローム(V56)で非常に大きなJSONファイル(クライアント側)のJSON.parse()
JSON.parse(this.responseText);
私はこのエラーが出るでしょう:私は私ができる、その同じJSON文字列をダウンロードして、待機中の1,2分後に、メモ帳でそれを開くと“Uncaught SyntaxError: Unexpected end of JSON input”
を一番下に移動するとJSON文字列全体が適切に表示されているかのように表示されます(適切な終了タグで終了します)。
JSON.parse()
には制限がありますか? ChromeがJSON文字列を適切なJSONオブジェクトに変換することができないのは私には驚きですこれはストレステストのシナリオで使用されているようなものですが、これはJSON文字列が500MBほど大きいことを確認したいと思います。注:JSON.parse(this.responseText)
を使用すると、200MBのJSON文字列に問題はありません。
(私は、JSONのサイズには制限はないと理解していますが、その質問はしません。別のコード行を実行する必要があります)
解決策を知っている人は誰でも(JSONを改ページするか、サーバー側を分割して複数の呼び出しを行うのではなく、クライアント側が理想的です)思考?
UPDATE:
私は小さいJSON文字列を取得し、AJAX応答の後にそれを解析していない場合、私はconsole.log(this.responseText.length);
を行うことができますこれは、デベロッパーツールで11514
を返します。
〜300MBのJSON文字列の場合、console.log(this.responseText.length);
は0
を返します。
AJAX呼び出し:
getData: function(url){
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(this.readyState === 4 && this.status === 200){
console.log(this.responseText.length);
return false; //prevent from going to next line to parse
var data = JSON.parse(this.responseText);
}
};
xhr.onerror = function(){
console.log('there was an error:', this);
};
xhr.open('GET', url, true);
xhr.send();
}
思考?私はこの問題に遭遇した唯一の人になることはできません。
JSON文字列全体が返されたことを確認しましたか? – sideroxylon
[可能なJSONの量に制限はありますか?](http://stackoverflow.com/questions/1262376/is-there-a-limit-on-how-much-json-can-hold) – SaggingRufus
@sideroxylon私はそれを確認するために最善を尽くしました。最も明白な答えは、文字列が不完全であることですが、私が理解できる限りではないようです。 –