보유 할 수있는 JSON의 양에는 제한이 있습니까?


163

주석 시스템에 jquery, JSON 및 AJAX를 사용하고 있습니다. 궁금합니다. JSON으로 전송 / 저장할 수있는 크기에 제한이 있습니까? 사용자가 많은 양을 입력하고 JSON을 통해 보내는 것처럼 일종의 최대 제한이 있습니까?

또한 JSON을 통해 모든 종류의 텍스트를 보낼 수 있습니다. 예를 들어 언젠가 사용자가 html을 사용하도록 허용하면 괜찮을까요?


9
아래에서 사람들의 답변을 어떻게 해석하는지주의하십시오! 대부분의 답변에 따르면 'JSON'자체에는 제한이 없습니다. 대부분의 서버에는 구성 가능한 제한이 있습니다. 각 송신에서 바이트를 약 8K 바이트 단위로 증가시키는 간단한 AJAX 테스트를 실행했는데 지금 시도한 여러 PHP / Apache 서버에서 실패했습니다. 오류 : "414 (요청 URI가 너무 큼)"
Jeach

3
iOS / iPhone에서 100kb 페이로드를 안정적으로 전송 / 수신합니다. 주의해야 할 점은 많은 프로토콜이 청크로 데이터를 수신하고 deserializer 논리가 특별히 설정되어 있지 않으면 모든 데이터가 수신되기를 기다리지 않고 청크를 역 직렬화하려고 시도하면 오류가 발생한다는 것입니다.
핫 릭

1
@Jeach-이 실패는 데이터 전송이 8K 블록으로 나뉘어 파싱을 시도하기 전에 다른 쪽 끝에서 제대로 재 조립되지 않았기 때문에 거의 확실합니다.
핫 릭

1
@Jeach-일반적인 코딩 오류입니다. 요청에서 첫 번째 응답 메시지를 기다리는 것 대 마지막을 기다리는 것 및 응답 데이터를 함께 연결합니다. 각 응답에는 최대 8K가 포함되므로 더 긴 데이터를 위해 여러 응답이 사용됩니다.
Hot Licks

1
@Jeach-iOS에서 표준 NSURLConnectionh를 사용 하여이 connectionDidFinishLoading작업을 수행하는 didReceiveData경우 수신 된 데이터를 이전 날짜와 단순히 연결 해야하는 곳이 아닌 JSON 번역 을 구현 하고 호출 해야합니다 받았습니다). 다른 환경도 비슷합니다.
Hot Licks

답변:


141

JSON은 XML과 같은 다른 데이터 형식과 유사합니다. 더 많은 데이터를 전송해야하는 경우 더 많은 데이터를 보내면됩니다. JSON 요청에는 고유 한 크기 제한이 없습니다. 서버는 요청을 파싱하여 제한을 설정합니다. 예를 들어 ASP.NET에는 serializer의 "MaxJsonLength"속성이 있습니다.


1
기술적으로 WHOLE 소스 코드를이 전체 페이지로 가져 가려면 json 객체로 보낼 수 있습니까?
JasonDavis

이 페이지의 코드는 실제로 6.7kb (외부 리소스를 세지 않음)입니다. 거의 모든 유형의 HTTP 요청으로 쉽게 수행 할 수 있습니다.
Amber

15
JavaScriptSerializer.MaxJsonLengthAmber의 답변에 언급 된 속성에 대해 "기본값은 2097152 자이며 이는 4MB의 유니 코드 문자열 데이터와 같습니다"라는 점에 주목할 필요가 있습니다 . (NB 나는 MSDN 에서 인용했다 )
dumbledad

155kb JSON 객체를 어떻게 파싱합니까?
Ray

2
@AsadHasan 서버는 데이터의 진행 방향에 따라 구문 분석 또는 직렬화 할 수 있습니다.
Amber

18

JSON 데이터 블록의 크기 또는 필드의 크기에는 고정 된 제한이 없습니다.

다양한 브라우저의 JavaScript 구현이 처리 할 수있는 JSON의 양에는 제한이 있습니다 (예 : 약 40MB). 예를 들어이 질문을 참조하십시오 .


4
8K는 JSON에 대해 매우 작은 한계입니다. JSON의 제한이 아니라 데이터가 8K 블록으로 전송되고 있으며 데이터를 수신하는 코드가 전체 페이로드가 도착하기를 기다리는 대신 개별 블록을 역 직렬화하려고 시도하고 있습니다.
핫 릭

나는 당신이 올바른 핫 릭입니다 내기. 답변을 업데이트했습니다.
cdiggins

9

JSON 작성기 / 파서의 구현에 따라 다릅니다. Microsoft의 DataContractJsonSerializer는 약 8kb의 하드 제한을 가지고있는 것으로 보이며 (8192라고 생각합니다) 더 큰 문자열에 대해서는 오류가 발생합니다.

편집 : 우리는이 답변에 설명 된대로 웹 구성에서 MaxJsonLength 속성을 설정하여 JSON 문자열에 대한 8K 제한을 해결할 수있었습니다 : https://stackoverflow.com/a/1151993/61569


5
8K "제한"은 거의 확실하게 데이터 전송 블록 경계이며 JSON 문서의 한계는 아닙니다. 멀티 블록 전송을 올바르게 재 조립하면 더 큰 스트링을 처리 할 수 ​​있습니다.
핫 릭

DataContractJsonSerializer에서 8K 제한을 변경하는 방법을 알아 낸 지 오래되었지만 "MaxJsonLength"설정 ( msdn.microsoft.com/en-us/library/… ) 이라고 생각합니다.
Anthony 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 유니 코드 문자이므로 4MB입니다. 위의 코드는 MaxJsonLength를 훨씬 더 큰 값으로 늘리고 있습니다. 어쩌면 "너무 큰"것으로 거부 될 수 있습니다. 다른 크기를 시도하고 얼마나 큰지 알아보십시오. int.MaxValue
ToolmakerSteve

당신은 무엇을 알고 있습니다. 아마 flase error bubble이 발생하거나 설정을 사용하고 있지 않습니다. 결과가 아닌이 사전 컨트롤러를 수행하려고합니다. 컨트롤러 호출에 큰 Json 객체를 보내려고 할 때 개발자 도구를 사용하고 요청 서버 측을 디버깅하면 크기가 Json 제한을 초과합니다.
Casey

이것은 내 문제이며 Microsoft 웹 사이트 별로이 문제를 해결하는 방법입니다. "기본적으로"내부 "JavaScriptSerializer는 웹 메소드에서 호출 될 때 maxJsonLength의 값을 존중합니다. JavaScriptSerializer의 직접 사용 (또는 MVC 조치 메소드 / 컨트롤러를 통한 사용)은 최소한 systemWebExtensions가 아닌 maxJsonLength 특성을 존중하지 않습니다. 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 자이며 4MB의 유니 코드 문자열 데이터에 해당합니다.

아래 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이미 다른 답변에서 해결되었습니다.
David Makogon

누구나 .NET JavaScriptSerializer보다 더 큰 처리 방법을 게시 할 수 있습니까? 예를 들어, 큰 JSON을 MVC 컨트롤러로 보내지 만 Newtonsoft의 시리얼 라이저를 사용하여 처리 할 수 ​​있습니까? 아니면 .NET에 내장되어 있고 사전 컨트롤러를 사용했기 때문에 이것이 불가능합니까?
Casey
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.