JSONが保持できる量に制限はありますか?


163

コメントシステムにjquery、JSON、AJAXを使用しています。JSONで送信/保存できるものにサイズ制限はありますか?ユーザーが大量に入力してJSONで送信した場合、なんらかの上限があるのでしょうか。

また、JSONを介してあらゆる種類のテキストを送信できます。たとえば、ユーザーにhtmlの使用を許可する場合がありますが、これで問題ありませんか?


9
以下の人々の答えをどのように解釈するかに注意してください!ほとんどの回答では、「JSON」自体に制限はありません。ほとんどのサーバーには構成可能な制限があります。送信ごとに1バイトずつインクリメントする単純なAJAXテストを実行しました。約8Kバイトで、今試したいくつかのPHP / Apacheサーバーで失敗しました。エラーは次のとおりです:「414(Request-URI Too Large)」
Jeach

3
iOS / iPhoneで100kbのペイロードを確実に送受信します。注意すべき点は、多くのプロトコルがチャンクでデータを受信することであり、デシリアライザロジックが特別に設定されていない限り、すべてのデータが受信されるのを待つのではなく、チャンクをデシリアライズしようとすると失敗します。
Hot Licks 2013年

1
@Jeach-その失敗は、ほぼ間違いなく、データ伝送が8Kブロックに分割され、解析を試みる前にもう一方の端で適切に再組み立てされなかったことが原因でした。
Hot Licks 14

1
@Jeach-これは一般的なコーディングエラーです。要求からの最初の応答メッセージのみを待機するか、最後の応答メッセージを待機し、応答データを連結します。各応答には最大8Kが含まれるため、より長いデータには複数の応答が使用されます。
Hot Licks 14

1
@Jeach-iOSで標準のNSURLConnectionhを使用してこれを実行connectionDidFinishLoadingしている場合、JSON変換を実装して実行する必要があります(または呼び出された後)ではなくdidReceiveData(受信したデータを以前の日付と単に連結する必要があります)受け取った)。他の環境も同様です。
Hot Licks 14

回答:


141

JSONはXMLなどの他のデータ形式に似ています。より多くのデータを送信する必要がある場合は、より多くのデータを送信するだけです。JSONリクエストに固有のサイズ制限はありません。制限は、リクエストを解析するサーバーによって設定されます。(たとえば、ASP.NETにはシリアライザの "MaxJsonLength"プロパティがあります。)


1
とても技術的に、私がこのソースコード全体をこのページ全体に持っていきたければ、それはjsonオブジェクトとして送信できますか?
JasonDavis、2009

このページのコードは実際にはわずか6.7kbです(外部リソースは含まれません)。これは、ほぼすべてのタイプのHTTPリクエストで簡単に実行できます。
アンバー

15
JavaScriptSerializer.MaxJsonLengthアンバーの回答で述べられているプロパティの「デフォルトは2097152文字で、これは4 MBのUnicode文字列データに相当する」ことに注意する価値があるかもしれません。(私はMSDNから引用したことに注意してください)
dumbledad

では、155kbのJSONオブジェクトをどのように解析するのでしょうか。
レイ

2
@AsadHasanサーバーは、データの方向に応じて、解析またはシリアル化できます。
アンバー

18

JSONデータブロックのサイズやフィールドのサイズに固定の制限はありません。

さまざまなブラウザーのJavaScript実装が処理できるJSONの量には制限があります(たとえば、私の経験では約40MB)。たとえば、この質問を参照してください。


4
8Kは、JSONの非常に小さな制限です。それはJSONの制限ではないのではないかと思いますが、データは8Kブロックで送信されており、データを受信するコードは、ペイロード全体が到着するのを待つのではなく、個々のブロックを逆シリアル化しようとしています。
Hot Licks 2013年

きっとあなたは正しいホットリックスだと思います。回答を更新しました。
cdiggins 2014

9

それはあなたのJSONライター/パーサーの実装に依存します。MicrosoftのDataContractJsonSerializerには約8kb(私は8192だと思います)のハード制限があるようで、大きな文字列の場合はエラーになります。

編集:次の回答で説明されているように、Web構成でMaxJsonLengthプロパティを設定することにより、JSON文字列の8K制限を解決できました:https ://stackoverflow.com/a/1151993/61569


5
8Kの「制限」は、ほぼ間違いなくデータ送信ブロックの境界であり、JSONドキュメントの制限ではありません。より大きなストリングは、マルチブロック伝送を正しく再組み立てすることにより処理できます。
Hot Licks 14

DataContractJsonSerializerで8Kの制限を変更する方法を理解してから久しぶりですが、それは "MaxJsonLength"設定( msdn.microsoft.com/en-us/library/...
アンソニー・F

5

送受信するJSONデータのサイズに制限はありません。Jsonデータもファイルで送信できます。使用しているブラウザーの機能に応じて、Jsonデータを処理できます。


5

実装では、サイズを含めてJSONドキュメントに制限を自由に設定できるため、パーサーは慎重に選択してください。見るRFC 7159をセクション9を。パーサー:

「実装では、受け入れるテキストのサイズに制限を設定できます。実装では、ネストの最大深度に制限を設定できます。実装では、数値の範囲と精度に制限を設定できます。実装では、長さと文字に制限を設定できます文字列の内容。」


3

ASP.NET MVCを使用している場合は、結果にMaxJsonLengthを追加することで問題を解決できます。

var jsonResult = Json(new
{
    draw = param.Draw,
    recordsTotal = count,
    recordsFiltered = count,
    data = result
}, JsonRequestBehavior.AllowGet);
jsonResult.MaxJsonLength = int.MaxValue;

ただし、これにより最大サイズは約4MBになり、さらに高くする必要があります。そのシナリオをどのように処理できますか?
ケーシー

@Casey-4MBを超えるとあなたにどのような症状が起こりますか?符号付き32ビット整数は最大20億です -サイズを制限する他の場所があるはずです。MaxJsonLength のデフォルト値は2MのUnicode文字なので、4MBです。上記のコードは MaxJsonLengthをはるかに大きな値に増やしています。たぶん、int.MaxValue「大きすぎる」として拒否される-他のサイズを試して、あなたが得ることができるどのように大規模な参照してください。
ToolmakerSteve

あなたは何を知っています、あなたは正しいです。おそらく、フレアーエラーのバブルが発生するか、設定が使用されていません。私は結果ではなく、このプレコントローラーを実行しようとしています。コントローラーコールに大きなJsonオブジェクトを送信しようとしたときに、開発者ツールを使用してリクエストサーバーをデバッグすると、サイズがJsonの制限を超えて返されます。
ケーシー

これは私の問題であり、MicrosoftのWebサイトごとにこれを回避する方法です。「基本的に、「内部」JavaScriptSerializerは、Webメソッドから呼び出されたときにmaxJsonLengthの値を尊重します。JavaScriptSerializerの直接使用(またはMVCアクションメソッド/コントローラーを介した使用)は、少なくともsystemWebExtensionsからは、maxJsonLengthプロパティを尊重しません。 .scripting.webServices.jsonSerializationセクション。web.configファイルで定義します。」
ケーシー

50kを超えるものをすべてList <type string>のようなチャンクに分割し、それをコントローラーに送信して、文字列ブラダーを実行してから、SQLにインポートできるかどうか、私はほとんど疑問に思います。
ケーシー

2

きっと誰もがここでトリックを逃した。jsonファイルの現在のファイルサイズ制限は、18,446,744,073,709,551,616文字であり、バイトを使用する場合は2文字以上、64ビットインフラストラクチャでは少なくとも2 ^ 64バイトです。

すべての意図と目的のために、無制限であると想定できます。おそらく、この問題に直面するのは難しいでしょう...


-6

JSON文字列の最大長。デフォルトは2097152文字で、4 MBのUnicode文字列データに相当します。

以下のURLを参照

https://docs.microsoft.com/en-us/dotnet/api/system.web.script.serialization.javascriptserializer.maxjsonlength?view=netframework-4.7.2


2
JSON自体には固有の制限はありません。あなたが投稿したものは、.netとそのJavaScriptSerializerクラスに固有のものです。そしてMaxJsonLength、すでに他の回答で扱われています。
デビッドマコゴン

誰もが.NET JavaScriptSerializerよりも大きな処理方法を投稿できますか?たとえば、大きなjsonをMVCコントローラーに送信し、Newtonsoftのシリアライザーを使用してそれを処理するにはどうすればよいですか。
ケーシー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.