2017-02-11 11 views
0

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

思考?私はこの問題に遭遇した唯一の人になることはできません。

+1

JSON文字列全体が返されたことを確認しましたか? – sideroxylon

+0

[可能なJSONの量に制限はありますか?](http://stackoverflow.com/questions/1262376/is-there-a-limit-on-how-much-json-can-hold) – SaggingRufus

+0

@sideroxylon私はそれを確認するために最善を尽くしました。最も明白な答えは、文字列が不完全であることですが、私が理解できる限りではないようです。 –

答えて

0

クロムが突然終了すると、JSONのどこかにエラーが発生する可能性があります。それはhttp://json.parser.online.fr/のようなjsonパーサーに投げて、問題があるかどうかを調べる価値があります。

メモ帳でjson文字列を調べるだけで、正しい答えが得られない可能性があります。

+0

私が試したカップルのJSONバリデーターは大量のコピー+ペーストでうまくやっていませんでした –

+0

そのサイトにコピー&ペーストして即座にクロムをクラッシュさせました。 =/ –

0

小さなJSONファイルを使用するか、Webサーバーファイルシステムに格納してサーバー側のレンダリングを行うことがあります。

+0

これはアプリケーションをストレステストするためのものです。本番環境では300MBのJSON文字列(うまくいけば)は見えませんが、100MB +は毎日共通です。データは、ビジュアルコンテンツをレンダリングするためにフロントエンドで使用されます。 –

関連する問題