Tôi thấy rất nhiều tham chiếu đến "JSON nén" khi nói đến các định dạng tuần tự khác nhau. Chính xác thì nó là gì? Nó chỉ là gzipped JSON hay cái gì khác?"JSON nén" là gì?
Trả lời
nén JSON loại bỏ phím: cặp giá trị của mã hóa json để chìa khóa cửa hàng và giá trị trong mảng song song riêng biệt:
// uncompressed
JSON = {
data : [
{ field1 : 'data1', field2 : 'data2', field3 : 'data3' },
{ field1 : 'data4', field2 : 'data5', field3 : 'data6' },
.....
]
};
//compressed
JSON = {
data : [ 'data1','data2','data3','data4','data5','data6' ],
keys : [ 'field1', 'field2', 'field3' ]
};
Phương pháp này sử dụng tôi tìm thấy ở đây
Nội dung từ liên kết (http://www.nwhite.net/?p=242)
hiếm khi tìm thấy chính mình ở nơi tôi đang viết các ứng dụng javascript sử dụng AJAX ở dạng thuần túy. Tôi từ lâu đã từ bỏ chữ ‘X’ và thay thế nó bằng chữ ‘J’ (JSON). Khi làm việc với Javascript, nó chỉ có ý nghĩa để trả về JSON. Dấu chân nhỏ hơn, phân tích cú pháp dễ dàng hơn và cấu trúc dễ dàng hơn là tất cả những lợi thế tôi đã đạt được kể từ khi sử dụng JSON.
Trong một dự án gần đây, tôi thấy mình không hài lòng với kích thước lớn của bộ kết quả của mình. Dữ liệu tôi đã quay trở lại là dữ liệu dạng bảng, dưới dạng các đối tượng cho mỗi hàng. Tôi đã trả về một tập hợp kết quả là 50, với 19 lĩnh vực mỗi. Những gì tôi nhận ra là nếu tôi tăng thêm kết quả, tôi có thể có được một dạng nén.
// nén
JSON = {
data : [
{ field1 : 'data1', field2 : 'data2', field3 : 'data3' },
{ field1 : 'data4', field2 : 'data5', field3 : 'data6' },
.....
]
};
// nén
JSON = {
data : [ 'data1','data2','data3','data4','data5','data6' ],
keys : [ 'field1', 'field2', 'field3' ]
};
tôi sáp nhập tất cả các giá trị của tôi vào một mảng duy nhất và lưu trữ tất cả các lĩnh vực của tôi trong một mảng riêng biệt. Trả về một cặp giá trị khóa cho mỗi kết quả khiến tôi tốn 8800 byte (8.6kb). Ripping các lĩnh vực ra và đặt chúng trong một mảng riêng biệt chi phí cho tôi 186 byte. Tổng số tiền tiết kiệm 8.4kb.
Bây giờ tôi có tệp JSON được nén nhiều hơn, nhưng cấu trúc lại khác và giờ khó làm việc hơn. Vì vậy, tôi thực hiện một giải pháp trong Mootools để làm cho giải nén trong suốt.
Request.JSON.extend({
options : {
inflate : []
}
});
Request.JSON.implement({
success : function(text){
this.response.json = JSON.decode(text, this.options.secure);
if(this.options.inflate.length){
this.options.inflate.each(function(rule){
var ret = ($defined(rule.store)) ? this.response.json[rule.store] : this.response.json[rule.data];
ret = this.expandData(this.response.json[rule.data], this.response.json[rule.keys]);
},this);
}
this.onSuccess(this.response.json, text);
},
expandData : function(data,keys){
var arr = [];
var len = data.length; var klen = keys.length;
var start = 0; var stop = klen;
while(stop < len){
arr.push(data.slice(start,stop).associate(keys));
start = stop; stop += klen;
}
return arr;
}
});
Request.JSON now has an inflate option. You can inflate multiple segments of your JSON object if you so desire.
Usage:
new Request.JSON({
url : 'url',
inflate : [{ 'keys' : 'fields', 'data' : 'data' }]
onComplete : function(json){}
});
Vượt qua nhiều đối tượng thổi phồng tùy thích với mảng tăng tùy chọn. Nó có thuộc tính tùy chọn được gọi là 'lưu trữ' Nếu đặt tập dữ liệu tăng cao sẽ được lưu trữ trong khóa đó thay thế.
Chuỗi mong đợi ‘khóa’ và ‘trường’ khớp với vị trí trong thư mục gốc của đối tượng JSON của bạn.
Câu trả lời có khả năng nhất là nó thực sự chỉ được nén JSON. Không có ý nghĩa tiêu chuẩn nào khác cho cụm từ này.
Sắp xếp lại một mảng đồng nhất của các đối tượng JSON thành một cặp mảng là một kỹ thuật rất hữu ích để làm cho tải trọng nhỏ hơn và tăng tốc mã hóa và giải mã, nó thường không được gọi là "JSON nén". Tôi đã không chạy trên nó bao giờ hết trong mã nguồn mở hoặc bất kỳ API mở, nhưng chúng tôi sử dụng kỹ thuật này trong nội bộ và gọi nó là "jsontable".
Có trụ sở tại câu trả lời Paniyar, chúng tôi có thể chuyển đổi một danh sách các đối tượng trong "nén" Json định dạng sử dụng C# như thế này:
var JsonString = serializer.Serialize(
new
{
cols = new[] { "field1", "field2", "field3"},
items = data.Select(x => new object[] {x.field1, x.field2, x.field3})
});
tôi đã sử dụng một loạt các đối tượng vì các lĩnh vực có thể int, bool, chuỗi ...
More Giảm: Nếu trường có được lặp lại rất thường xuyên và nó là một loại chuỗi, bạn có thể nén một chút được nhiều hơn nếu bạn thêm một danh sách riêng biệt của lĩnh vực đó ... ví dụ, một tên trường vị trí công việc, thành phố, vv là ứng cử viên xuất sắc cho việc này. Bạn có thể thêm danh sách riêng biệt của các mục này và trong mỗi mục thay đổi giá trị cho số tham chiếu. Điều đó sẽ làm cho Json của bạn thêm lite.
nén:
[["KeyA", "KeyB", "KeyC", "KeyD", "KeyE", "KeyF"],
["ValA1", "ValB1", "ValC1", "ValD1", "ValE1", "ValF1"],
["ValA2", "ValB2", "ValC2", "ValD2", "ValE2", "ValF2"],
["ValA3", "ValB3", "ValC3", "ValD3", "ValE3", "ValF3"],
["ValA4", "ValB4", "ValC4", "ValD4", "ValE4", "ValF4"]]
nén:
[{KeyA: "ValA1", KeyB: "ValB1", KeyC: "ValC1", KeyD: "ValD1", KeyE: "ValE1", KeyF: "ValF1"},
{KeyA: "ValA2", KeyB: "ValB2", KeyC: "ValC2", KeyD: "ValD2", KeyE: "ValE2", KeyF: "ValF2"},
{KeyA: "ValA3", KeyB: "ValB3", KeyC: "ValC3", KeyD: "ValD3", KeyE: "ValE3", KeyF: "ValF3"},
{KeyA: "ValA4", KeyB: "ValB4", KeyC: "ValC4", KeyD: "ValD4", KeyE: "ValE4", KeyF: "ValF4"}]
- 1. Deserialize & Serialize trong JSON là gì,
- 2. Tiện ích nén unix tốt nhất là gì?
- 3. Công cụ nén/obfuscation JavaScript tốt nhất là gì?
- 4. Cách pythonic để giải nén tuples là gì?
- 5. Tính năng nén trong Memcache của PHP là gì?
- 6. Làm thế nào để nén JSON với PHP?
- 7. Trình ghi đè JSON tốt nhất cho Java là gì?
- 8. Octet JSON là gì và tại sao hai yêu cầu?
- 9. Loại MIME chính xác cho JSON là gì?
- 10. cassandra làm gì trong quá trình nén?
- 11. AppEngine gzip nén
- 12. Thuật toán nén tốt nhất cho các tệp 4 KB nhỏ là gì?
- 13. Kích thước bộ đệm để tạo tệp nén .zip bằng Java là gì?
- 14. Ngưỡng thấp hơn để không thực hiện nén http là gì?
- 15. Cách nhanh nhất để tải hình ảnh nén trên iOS là gì?
- 16. Cách tốt nhất để giải nén đáp ứng máy chủ gzip'ed bằng Python 3 là gì?
- 17. Sự khác nhau giữa máy nén 7z và lzma là gì?
- 18. Trạng thái hiện tại của thuật toán nén chỉ văn bản là gì?
- 19. Mục đích của các con trỏ đối tượng nén là gì?
- 20. Nén tệp nén zip
- 21. nén và giải nén suối
- 22. JavaScript: Giải nén/thổi phồng/giải nén/giải nén chuỗi
- 23. Jmeter giải nén các lĩnh vực/phân tích cú pháp JSON phản ứng
- 24. dấu phẩy có nghĩa gì trong giải nén của python?
- 25. IIS 7.5 không nén JSON khi được đặt trong ứng dụng web.config
- 26. Tôi nên chọn gì - JSON hoặc SQLite?
- 27. Cài đặt mức nén nén IIS7
- 28. Nén bằng Java Giải nén bằng PHP
- 29. Có thể nén javascript không nén
- 30. Node.js là một giao nhận JSON
này được phiếu bầu tán thành của tôi nếu bạn có thể thêm một trích dẫn ... không bao giờ nghe nói về nó trước và nó có vẻ khá mát mẻ. – Domenic
Một điều cần lưu ý trong bài viết, một người bình luận "Isaac Schlueter" chứng minh rằng so sánh rằng phương pháp này kém hiệu quả hơn chỉ sử dụng gzip, mặc dù tác giả lưu ý rằng không phải tất cả các trình duyệt đều chấp nhận gzip. – Seanny123
Cả hai liên kết đều đã chết. Có thư viện nào hỗ trợ điều này không? – Nisarg