C'è un limite a quanto JSON può contenere?


163

Sto usando jquery, JSON e AJAX per un sistema di commenti. Sono curioso, esiste un limite di dimensioni su ciò che è possibile inviare / archiviare con JSON? Ad esempio, se un utente digita un importo elevato e lo invio tramite JSON, esiste una sorta di limite massimo?

Inoltre, qualsiasi tipo di testo può essere inviato tramite JSON. per esempio, a volte permetto agli utenti di usare HTML, andrà bene?


9
Fai attenzione a come interpreti le risposte delle persone qui sotto! La maggior parte delle risposte afferma che non ci sono limiti a "JSON" stesso. Mentre la maggior parte dei server avrà un limite configurabile. Ho eseguito un semplice test AJAX in cui ho incrementato un byte su ogni invio e a circa 8K byte, non è riuscito su diversi server PHP / Apache che ho provato ora. Errore: "414 (Request-URI Too Large)"
Jeach

3
Inviamo / riceviamo in modo affidabile payload da 100kb su iOS / iPhone. Qualcosa di cui fare attenzione è che molti protocolli ricevono dati in blocchi, e il tentativo di deserializzare il blocco piuttosto che attendere che tutti i dati vengano ricevuti comporterà un errore, a meno che la logica del deserializzatore non sia appositamente impostata per esso.
Hot Licks

1
@Jeach - Questo errore era quasi certamente dovuto alla trasmissione dei dati suddivisa in blocchi da 8K, quindi non correttamente riassemblati dall'altra parte prima di tentare di analizzare.
Hot Licks,

1
@Jeach - Questo è un errore di codifica comune. In attesa solo del primo messaggio di risposta da una richiesta vs in attesa dell'ultimo e concatenando i dati di risposta insieme. Ogni risposta conterrà al massimo 8 KB, quindi per dati più lunghi vengono utilizzate più risposte.
Hot Licks

1
@Jeach - Se lo stai facendo in iOS, con un NSURLConnectionh standard, devi implementare connectionDidFinishLoadinge fare la traduzione JSON lì (o dopo che viene chiamata), non in didReceiveData(dove dovresti semplicemente concatenare i dati ricevuti con la data precedente ricevuta). Altri ambienti sono simili.
Hot Licks

Risposte:


141

JSON è simile ad altri formati di dati come XML: se è necessario trasmettere più dati, è sufficiente inviare più dati. Non ci sono limiti di dimensioni intrinseche alla richiesta JSON. Qualsiasi limitazione verrebbe impostata dal server che analizza la richiesta. (Ad esempio, ASP.NET ha la proprietà "MaxJsonLength" del serializzatore.)


1
così tecnicamente, se volessi portare l'intero codice sorgente su questa intera pagina, potrebbe essere inviato come un oggetto json?
JasonDavis,

Il codice di questa pagina è in realtà solo 6.7kb (senza contare le risorse esterne). Ciò si farebbe facilmente con qualsiasi tipo di richiesta HTTP.
Ambra

15
Vale la pena notare che "l'impostazione predefinita è 2097152 caratteri, che equivale a 4 MB di dati stringa Unicode" per la proprietà JavaScriptSerializer.MaxJsonLengthmenzionata nella risposta di Amber. (NB ho citato da MSDN )
stupido il

Quindi come analizzerei un oggetto JSON da 155kb?
Ray,

2
@AsadHasan Un server può analizzare o serializzare, a seconda della direzione in cui stanno andando i dati.
Ambra

18

Non esiste un limite fisso per quanto è grande un blocco di dati JSON o uno qualsiasi dei campi.

Esistono limiti a quanto JSON può gestire l'implementazione JavaScript di vari browser (ad esempio, circa 40 MB nella mia esperienza). Vedi questa domanda per esempio .


4
8K è un limite eccezionalmente piccolo per JSON. Sospetto che non sia un limite per JSON, ma piuttosto i dati vengono trasmessi in blocchi da 8 KB e il codice che riceve i dati sta tentando di deserializzare un singolo blocco anziché aspettare che arrivi l'intero payload.
Hot Licks

Scommetto che hai corretto Hot Licks. Ho aggiornato la mia risposta.
cdiggins,

9

Dipende dall'implementazione del tuo writer / parser JSON. DataContractJsonSerializer di Microsoft sembra avere un limite rigido attorno a 8kb (8192 credo), e verrà fuori per stringhe più grandi.

Modifica: siamo riusciti a risolvere il limite di 8 KB per le stringhe JSON impostando la proprietà MaxJsonLength nella configurazione Web come descritto in questa risposta: https://stackoverflow.com/a/1151993/61569


5
Un "limite" 8K è quasi certamente un limite del blocco di trasmissione dati, non il limite per un documento JSON. Le stringhe più grandi possono essere elaborate riassemblando correttamente la trasmissione multi-blocco.
Hot Licks,

È passato un po 'di tempo da quando abbiamo capito come modificare il limite di 8 KB in DataContractJsonSerializer, ma penso che fosse l'impostazione "MaxJsonLength" ( msdn.microsoft.com/en-us/library/… )
Anthony F

5

Non esiste davvero alcun limite alla dimensione dei dati JSON da inviare o ricevere. Possiamo anche inviare i dati Json nel file. In base alle capacità del browser con cui si sta lavorando, è possibile gestire i dati Json.


5

Le implementazioni sono libere di impostare limiti sui documenti JSON, inclusa la dimensione, quindi scegli saggiamente il tuo parser. Vedi RFC 7159 , Sezione 9. Parser:

"Un'implementazione può stabilire limiti sulla dimensione dei testi che accetta. Un'implementazione può stabilire limiti sulla massima profondità di annidamento. Un'implementazione può stabilire limiti sulla gamma e la precisione dei numeri. Un'implementazione può impostare limiti sulla lunghezza e il carattere contenuto delle stringhe ".


3

Se si lavora con ASP.NET MVC, è possibile risolvere il problema aggiungendo MaxJsonLength al risultato:

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

Ma questo rende il massimo di circa 4 MB e ne abbiamo bisogno più in alto. Come potremmo gestire quello scenario?
Casey,

@Casey: quale sintomo accade per te oltre i 4 MB? il numero intero a 32 bit con segno arriva a 2 miliardi - ci deve essere qualcos'altro che limita la tua dimensione. Il valore predefinito di MaxJsonLength è 2M caratteri Unicode, quindi 4 MB. Il codice sopra sta aumentando MaxJsonLength a un valore molto più grande . Forse int.MaxValueviene rifiutato come "troppo grande": prova altre dimensioni e vedi quanto puoi ottenere.
ToolmakerSteve

Sai cosa, hai ragione. Probabilmente sto ottenendo un errore flase, o non sto usando l'impostazione. Sto provando a fare questo pre-controller, non sul risultato. Quando provo a inviare un oggetto Json di grandi dimensioni alla chiamata del controller, se utilizzo gli strumenti di sviluppo e eseguo il debug il lato del server di richiesta restituisce la dimensione supera il limite Json.
Casey,

Questo è il mio problema, come aggirare il problema sul sito Web di Microsoft. "Fondamentalmente, JavaScriptSerializer" interno "rispetta il valore di maxJsonLength quando viene chiamato da un metodo Web. L'uso diretto di JavaScriptSerializer (o l'uso tramite un metodo / controller di azione MVC) non rispetta la proprietà maxJsonLength, almeno non dal systemWebExtensions .scripting.webServices.jsonSerialization section che definisci nel file web.config. "
Casey

Mi chiedo quasi se potrei dire, suddividere qualcosa di oltre 50k in blocchi come List <type string>, quindi inviarlo al controller e fare un bulder di stringa, quindi importare in SQL.
Casey,

2

Sicuramente tutti hanno perso un trucco qui. L'attuale limite di dimensione del file di un file json è di 18.446.744.073.709.551.616 caratteri o se si preferiscono byte, o anche 2 ^ 64 byte se si stanno guardando almeno infrastrutture a 64 bit.

A tutti gli effetti, possiamo supporre che sia illimitato in quanto probabilmente avrai difficoltà a risolvere questo problema ...


-6

La lunghezza massima delle stringhe JSON. L'impostazione predefinita è 2097152 caratteri, che equivale a 4 MB di dati stringa Unicode.

Fare riferimento all'URL seguente

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


2
JSON stesso non ha limiti intrinseci. Quello che hai pubblicato è specifico di .net e della sua JavaScriptSerializerclasse. Ed MaxJsonLengthè già stato affrontato in altre risposte.
David Makogon,

Qualcuno può pubblicare come gestire più grande di .NET JavaScriptSerializer? Ad esempio, come posso inviare un json di grandi dimensioni al controller MVC ma utilizzare il serializzatore di Newtonsoft per gestirlo o non è possibile poiché è incorporato in .NET e viene utilizzato il pre-controller?
Casey,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.