Existe um limite de quanto JSON pode armazenar?

163

Estou usando jquery, JSON e AJAX para um sistema de comentários. Estou curioso, existe um limite de tamanho para o que você pode enviar / armazenar com JSON? Como se um usuário digitasse uma grande quantidade e eu a enviasse através do JSON, existe algum tipo de limite máximo?

Também pode ser enviado qualquer tipo de texto através do JSON. por exemplo, em algum momento eu permito que os usuários usem html, tudo ficará bem?

JasonDavis
fonte
9
Cuidado ao interpretar as respostas das pessoas abaixo! A maioria das respostas diz que não há limites para o próprio 'JSON'. Enquanto a maioria dos servidores terá um limite configurável. Executei um teste AJAX simples em que incrementei um byte em cada envio e, com aproximadamente 8K bytes, ele falhou em vários servidores PHP / Apache que tentei agora. O erro foi: "414 (URI de solicitação muito grande)"
Jeach
3
Enviamos / recebemos cargas úteis de 100kb no iOS / iPhone. Algo a ter em atenção é que muitos protocolos recebem dados em pedaços, e a tentativa de desserializar o pedaço em vez de esperar que todos os dados sejam recebidos resultará em falha, a menos que sua lógica de desserializador esteja especialmente configurada para ele.
Hot Licks
1
@Each - Essa falha foi quase certamente devido à transmissão de dados ser dividida em blocos de 8K e depois não ser remontada adequadamente na outra extremidade antes de tentar analisar.
Hot Licks
1
@Each - Este é um erro de codificação comum. Aguardando apenas a primeira mensagem de resposta de uma solicitação versus aguardando a última e concatenando os dados da resposta juntos. Cada resposta conterá no máximo 8K, portanto, para dados mais longos, várias respostas serão usadas.
Hot Licks
1
@Each - Se você está fazendo isso no iOS, com um NSURLConnectionh padrão, precisa implementar connectionDidFinishLoadinge fazer a tradução JSON lá (ou depois que isso é chamado), não em didReceiveData(onde você deve simplesmente concatenar os dados recebidos com a data anterior) recebido). Outros ambientes são semelhantes.
Hot Licks

Respostas:

141

JSON é semelhante a outros formatos de dados como XML - se você precisar transmitir mais dados, basta enviar mais dados. Não há limitação de tamanho inerente à solicitação JSON. Qualquer limitação seria definida pelo servidor que analisava a solicitação. (Por exemplo, o ASP.NET possui a propriedade "MaxJsonLength" do serializador.)

Âmbar
fonte
1
tão tecnicamente, se eu quisesse levar o código fonte INTEIRO para esta página inteira, ele poderia ser enviado como um objeto json?
JasonDavis
O código desta página é de apenas 6,7kb (sem contar os recursos externos). Isso seria feito facilmente com praticamente qualquer tipo de solicitação HTTP.
1111 Amber
15
Vale a pena notar que o "padrão é 2097152 caracteres, o que equivale a 4 MB de dados de seqüência de caracteres Unicode" para a propriedade JavaScriptSerializer.MaxJsonLengthmencionada na resposta de Amber. (NB que citei no MSDN )
dumbledad 12/12/12
Então, como eu analisaria um objeto JSON de 155kb?
Raio
2
@AsadHasan Um servidor pode analisar ou serializar, dependendo da direção em que os dados estão indo.
13133 Amber
18

Não há limite fixo para o tamanho de um bloco de dados JSON ou para qualquer um dos campos.

Existem limites para quanto JSON a implementação JavaScript de vários navegadores pode suportar (por exemplo, cerca de 40 MB na minha experiência). Veja esta pergunta por exemplo .

cdiggins
fonte
4
8K é um limite excepcionalmente pequeno para JSON. Eu suspeito que isso não seja um limite para o JSON, mas os dados estão sendo transmitidos em blocos de 8K e o código que recebe os dados está tentando desserializar um bloco individual em vez de aguardar a chegada da carga útil inteira.
Hot Licks
Aposto que você está correto, Hot Licks. Eu atualizei minha resposta.
Cdiggins
9

Depende da implementação do seu gravador / analisador JSON. O DataContractJsonSerializer da Microsoft parece ter um limite rígido em torno de 8kb (8192 eu acho), e ocorrerá um erro em seqüências maiores.

Edit: Conseguimos resolver o limite de 8K para cadeias JSON definindo a propriedade MaxJsonLength na configuração da web, conforme descrito nesta resposta: https://stackoverflow.com/a/1151993/61569

Anthony F
fonte
5
Um "limite" de 8K é quase certamente um limite de bloco de transmissão de dados, não o limite para um documento JSON. Seqüências maiores podem ser processadas remontando corretamente a transmissão de vários blocos.
Hot Licks
Tem sido um tempo desde que descobriu como alterar o limite de 8K na DataContractJsonSerializer, mas eu acho que foi a "MaxJsonLength" configuração ( msdn.microsoft.com/en-us/library/... )
Anthony F
5

Realmente não há limite para o tamanho dos dados JSON a serem enviados ou recebidos. Também podemos enviar dados Json em arquivo. De acordo com os recursos do navegador com o qual você está trabalhando, os dados do Json podem ser manipulados.

Chaitanya Belsare
fonte
5

As implementações são livres para definir limites nos documentos JSON, incluindo o tamanho, portanto escolha seu analisador com sabedoria. Veja RFC 7159 , Seção 9. Analisadores:

"Uma implementação pode definir limites para o tamanho dos textos que aceita. Uma implementação pode definir limites para a profundidade máxima de aninhamento. Uma implementação pode definir limites para o alcance e a precisão dos números. Uma implementação pode definir limites para o comprimento e o caráter conteúdo das strings ".

stleary
fonte
3

Se você estiver trabalhando com o ASP.NET MVC, poderá resolver o problema adicionando MaxJsonLength ao seu resultado:

var jsonResult = Json(new
{
    draw = param.Draw,
    recordsTotal = count,
    recordsFiltered = count,
    data = result
}, JsonRequestBehavior.AllowGet);
jsonResult.MaxJsonLength = int.MaxValue;
mathias.horn
fonte
Mas isso faz com que o máximo seja aproximadamente 4 MB, e precisamos disso mais alto. Como poderíamos lidar com esse cenário?
26819 Casey
@ Casey - que sintoma acontece para você além de 4 MB? um número inteiro de 32 bits assinado chega a 2 bilhões - deve haver algo em outro lugar limitando seu tamanho. O valor padrão de MaxJsonLength é 2M de caracteres Unicode, portanto, 4 MB. O código acima está aumentando MaxJsonLength para um valor muito maior . Talvez int.MaxValueseja rejeitado como "muito grande" - tente outros tamanhos e veja o tamanho que você pode obter.
Home
Você sabe o que, você está correto. Provavelmente, estou recebendo uma bolha de erro de base ou ela não está utilizando a configuração. Estou tentando fazer este pré controlador, não no resultado. Quando tento enviar um objeto Json grande para a chamada do controlador, se eu usar as ferramentas de desenvolvedor e depurar, o lado do servidor de solicitação está retornando, o tamanho excede o limite de Json.
Casey
Este é o meu problema, como contornar isso de acordo com o site da Microsoft. "Basicamente, o JavaScriptSerializer" interno "respeita o valor de maxJsonLength quando chamado de um método da Web. O uso direto de um JavaScriptSerializer (ou o uso de um método de ação / Controller MVC) não respeita a propriedade maxJsonLength, pelo menos não do systemWebExtensions .scripting.webServices.jsonSerialization, que você define no arquivo web.config. "
Casey
Eu quase me pergunto se eu poderia dizer, dividir qualquer coisa acima de 50k em pedaços como List <type string>, enviar isso para o controlador e criar um bulder de string, depois importar para SQL.
Casey
2

Certamente todo mundo perdeu um truque aqui. O limite de tamanho de arquivo atual de um arquivo json é de 18.446.744.073.709.551.616 caracteres ou, se você preferir bytes, ou mesmo 2 ^ 64 bytes, se estiver procurando pelo menos infraestruturas de 64 bits.

Para todos os efeitos, podemos supor que seja ilimitado, pois você provavelmente terá dificuldade em resolver esse problema ...

Perfect64
fonte
-6

O comprimento máximo de cadeias JSON. O padrão é 2097152 caracteres, o que equivale a 4 MB de dados da cadeia Unicode.

Consulte o URL abaixo

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

Shashi Keshar
fonte
2
O próprio JSON não tem limite inerente. O que você postou é específico para .net e sua JavaScriptSerializerclasse. E MaxJsonLengthjá foi abordado em outras respostas.
David Makogon
Alguém pode postar como lidar com maior que o .NET JavaScriptSerializer? Por exemplo, como posso enviar um json grande para o controlador MVC, mas usar o serializador da Newtonsoft para lidar com isso ou isso não é possível, uma vez que está embutido no .NET e o pré-controlador usado está sendo atingido?
Casey #