JSON可以容纳多少有限制?


163

我将jquery,JSON和AJAX用于注释系统。我很好奇,可以通过JSON发送/存储的内容是否有大小限制?就像用户输入大量内容并通过JSON发送一样,是否存在某种最大限制?

也可以通过JSON发送任何类型的文本。例如,有时我允许用户使用html,这样可以吗?


9
请注意您如何解读以下人员的答案!大多数答案都说“ JSON”本身没有限制。虽然大多数服务器将具有可配置的限制。我运行了一个简单的AJAX测试,在该测试中,每次发送时我增加一个字节,并且大约增加8K字节,但在我现在尝试的几台PHP / Apache服务器上失败了。错误是:“ 414(请求URI太大)”
Jeach

3
我们在iOS / iPhone上可靠地发送/接收100kb负载。要注意的是,许多协议都以块的形式接收数据,并且尝试对块进行反序列化而不是等待所有数据都将被接收会导致失败,除非为此专门设置了解串器逻辑。
2013年

1
@Jeach-这种故障几乎可以肯定是由于数据传输被分成8K块,然后在尝试解析之前在另一端没有正确地重组。
热门点击2014年

1
@Jeach-这是常见的编码错误。仅等待来自请求的第一个响应消息与等待最后一个并将响应数据串联在一起。每个响应最多包含8K,因此对于更长的数据,将使用多个响应。
热门点击2014年

1
@Jeach-如果要在iOS中使用标准的NSURLConnectionh进行此操作,则需要在connectionDidFinishLoading此处(或在调用之后)而不是在didReceiveData其中实现和执行JSON转换(您应该在其中简单地将接收到的数据与先前的日期连接起来)收到)。其他环境类似。
热门点击2014年

Answers:


141

JSON与其他数据格式(如XML)相似-如果您需要传输更多数据,则只需发送更多数据。JSON请求没有固有的大小限制。服务器将通过解析请求来设置任何限制。(例如,ASP.NET具有序列化程序的“ MaxJsonLength”属性。)


1
因此从技术上讲,如果我想将整个源代码都带到整个页面,可以将它作为json对象发送?
贾森·戴维斯(JasonDavis)2009年

该页面的代码实际上只有6.7kb(不计算外部资源)。几乎任何类型的HTTP请求都可以轻松完成。
琥珀色

15
可能值得注意的是JavaScriptSerializer.MaxJsonLength,Amber答案中提到的属性的“默认值为2097152个字符,相当于4 MB的Unicode字符串数据” 。(请注意,我已经引用了MSDN的内容
dumbledad 2012年

那么我将如何解析155kb的JSON对象呢?

2
@AsadHasan服务器可以解析或序列化,具体取决于数据的方向。
2013年

18

JSON数据块或任何字段的大小没有固定限制。

各种浏览器的JavaScript实现可以处理多少JSON是有限制的(例如,根据我的经验,此大小约为40MB)。例如,请参见此问题


4
8K是JSON的一个极小的限制。我怀疑这不是JSON的限制,而是数据以8K块的形式传输,并且接收数据的代码试图反序列化单个块,而不是等待整个有效负载到达。
2013年

我敢打赌你是正确的热舔。我更新了答案。
cdiggins 2014年

9

这取决于您的JSON编写器/解析器的实现。微软的DataContractJsonSerializer似乎有一个大约8kb的硬限制(我认为是8192),并且对于较大的字符串它会出错。

编辑:我们能够通过在Web配置中设置MaxJsonLength属性来解决JSON字符串的8K限制,如此答案中所述:https ://stackoverflow.com/a/1151993/61569


5
8K“限制”几乎可以肯定是数据传输块的边界,而不是JSON文档的限制。可以通过正确重组多段传输来处理较大的字符串。
热门点击

它已经有一段时间,我们想出了如何更改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

@Casey-超出4MB时,您会遇到什么症状?带符号的32位整数最多可达到20 亿 -在其他地方必须有某些限制您的大小的东西。MaxJsonLength 的默认值为2M Unicode字符,因此为4MB。上面的代码 MaxJsonLength增加到一个更大的值。也许int.MaxValue因为“太大”而被拒绝-尝试其他尺寸,然后看看可以得到多大。
ToolmakerSteve

你知道什么,你是正确的。我可能会出现flase错误气泡,或者它没有利用该设置。我试图做这个前置控制器,而不是结果。当我尝试向控制器调用发送较大的Json对象时,如果我使用开发人员工具并调试请求服务器端,则返回的大小超过了Json限制。
Casey

这是我的问题,如何解决每个Microsoft网站上的问题。“基本上,从Web方法调用时,“内部” JavaScriptSerializer会尊重maxJsonLength的值。直接使用JavaScriptSerializer(或通过MVC动作方法/控制器使用)不会遵循maxJsonLength属性,至少从systemWebExtensions中不会您在web.config文件中定义的.scripting.webServices.jsonSerialization部分。”
Casey

我几乎想知道是否可以说,将超过50k的任何内容分解成类似List <type string>的块,然后将其发送到控制器,并进行字符串扩展,然后导入SQL。
Casey

2

当然,每个人都错过了这里的把戏。json文件的当前文件大小限制为18,446,744,073,709,551,616个字符,或者如果您更喜欢字节,或者如果至少要查看64位基础结构,则甚至为2 ^ 64字节。

出于所有目的和目的,我们可以假定它是无限的,因为您可能很难解决这个问题...


-6

JSON字符串的最大长度。默认值为2097152个字符,相当于4 MB的Unicode字符串数据。

请参阅下面的URL

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


2
JSON本身没有固有限制。您发布的内容特定于.net及其JavaScriptSerializer类。并且MaxJsonLength已经在其他答案中得到了解决。
David Makogon

任何人都可以发布如何处理更大的.NET JavaScriptSerializer吗?例如,如何将大型json发送到MVC控制器,但使用Newtonsoft的序列化程序来处理它,或者这是不可能的,因为它内置于.NET中并且被使用了pre控制器?
Casey
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.