2009-08-11 30 views
115

Tôi đang sử dụng jquery, JSON và AJAX cho hệ thống nhận xét. Tôi tò mò, có giới hạn kích thước về những gì bạn có thể gửi qua/lưu trữ với JSON không? Giống như nếu người dùng nhập một số lượng lớn và tôi gửi nó qua JSON thì có giới hạn tối đa nào không?Có giới hạn về số lượng JSON có thể giữ không?

Cũng có thể bất kỳ loại văn bản nào được gửi qua JSON. ví dụ đôi khi tôi cho phép người dùng sử dụng html, điều này có ổn không?

+0

Thực ra, tôi nghĩ có một số loại giới hạn nhưng tôi không thể xác định được nó; đây là trường hợp: Tôi có một trang Asp.Net (không phán xét tôi, tôi đã được yêu cầu làm việc với nó) mà truy vấn DB và được một datatable với khoảng 2000 hàng và 27 cột. Nếu tôi thả datatable vào một XML, yêu cầu từ khách hàng hoạt động, chậm nhưng hoạt động, vì js đang tạo bảng và làm một số công cụ .. anyway ... Tôi đã làm một DataTable Để jSon thường xuyên mà đã luôn luôn làm việc cho tôi như một sự quyến rũ, nhưng trong trường hợp này, lượng dữ liệu khổng lồ đó dường như bị cắt bớt, hoặc một cái gì đó khác đang diễn ra, nhưng respon máy chủ –

+4

Hãy cẩn thận cách bạn diễn giải câu trả lời của mọi người bên dưới! Hầu hết các câu trả lời đều nói rằng không có giới hạn nào đối với 'JSON'. Trong khi hầu hết các máy chủ sẽ có giới hạn cấu hình. Tôi chạy một bài kiểm tra AJAX đơn giản, nơi tôi tăng một byte trên mỗi lần gửi và ở khoảng 8K byte, nó không thành công trên một số máy chủ PHP/Apache mà tôi đã thử ngay bây giờ. Lỗi là: "414 (Yêu cầu-URI quá lớn)" – Jeach

+1

Chúng tôi tin cậy gửi/nhận 100kb tải trọng trên iOS/iPhone. Một cái gì đó để nhận thức được là nhiều giao thức nhận dữ liệu theo khối, và cố gắng deserialize đoạn thay vì chờ đợi cho tất cả các dữ liệu được nhận sẽ dẫn đến thất bại, trừ khi logic deserializer của bạn được thiết lập đặc biệt cho nó. –

Trả lời

104

JSON tương tự như các định dạng dữ liệu khác như XML - nếu bạn cần truyền nhiều dữ liệu hơn, bạn chỉ cần gửi thêm dữ liệu. Không có giới hạn kích thước cố hữu nào đối với yêu cầu JSON. Mọi hạn chế sẽ được thiết lập bởi máy chủ phân tích cú pháp yêu cầu. (Ví dụ, ASP.NET có thuộc tính "MaxJsonLength" của bộ nối tiếp.)

+1

vì vậy kỹ thuật, Nếu tôi muốn lấy mã nguồn WHOLE cho toàn bộ trang này, nó có thể được gửi như một đối tượng json? – JasonDavis

+2

Có, với mã hóa thích hợp. – fresskoma

+0

@jasondavis, Dễ dàng. – bdonlan

4

Nó phụ thuộc vào việc triển khai trình soạn thảo/trình phân tích cú pháp JSON của bạn. DataContractJsonSerializer của Microsoft dường như có một giới hạn cứng khoảng 8kb (8192 tôi nghĩ), và nó sẽ lỗi cho các chuỗi lớn hơn.

Edit: Chúng tôi đã có thể giải quyết các hạn 8K cho chuỗi JSON bằng cách thiết lập thuộc tính MaxJsonLength trong cấu hình web như mô tả trong câu trả lời này: https://stackoverflow.com/a/1151993/61569

+2

Giới hạn 8K "gần như chắc chắn là ranh giới khối truyền dữ liệu, không phải giới hạn cho tài liệu JSON. Các chuỗi lớn hơn có thể được xử lý bằng cách ghép lại chính xác quá trình truyền đa khối. –

+0

Đã một thời gian kể từ khi chúng tôi tìm ra cách thay đổi giới hạn 8K trong DataContractJsonSerializer, nhưng tôi nghĩ đó là cài đặt "MaxJsonLength" (http://msdn.microsoft.com/en-us/library/system.web. script.serialization.javascriptserializer.maxjsonlength (v = vs.110) .aspx) –

11

Không có giới hạn nhất định về cách lớn một khối dữ liệu JSON là hoặc bất kỳ trường nào.

Có giới hạn cho việc JSON thực thi JavaScript của nhiều trình duyệt khác nhau có thể xử lý (ví dụ: khoảng 40MB trong trải nghiệm của tôi). Xem this question for example.

+3

8K là một giới hạn nhỏ đặc biệt đối với JSON. Tôi nghi ngờ đó không phải là một giới hạn cho JSON, mà đúng hơn là dữ liệu đang được truyền trong các khối 8K và mã nhận dữ liệu đang cố gắng deserialize một khối riêng lẻ thay vì chờ toàn bộ tải trọng đến. –

+0

Tôi đặt cược bạn là Licks Hot chính xác. Tôi đã cập nhật câu trả lời của mình. – cdiggins

3

Thực sự không có giới hạn về kích thước dữ liệu JSON được gửi hoặc nhận. Chúng tôi cũng có thể gửi dữ liệu Json trong tệp. Theo khả năng của trình duyệt mà bạn đang làm việc, dữ liệu Json có thể được xử lý.

3

Triển khai miễn phí để đặt giới hạn đối với tài liệu JSON, bao gồm cả kích thước, vì vậy hãy chọn phân tích cú pháp của bạn một cách khôn ngoan. Xem RFC 7159, Phần 9. Trình phân tích cú pháp:

"Việc triển khai có thể đặt giới hạn về độ sâu tối đa của việc lồng. số thực hiện. Có thể đặt giới hạn về độ dài và nội dung ký tự của chuỗi. "

Các vấn đề liên quan