ibz*_*ibz 14 serialization json
当涉及到不同的序列化格式时,我看到很多对"压缩JSON"的引用.究竟是什么?它只是gzip压缩JSON还是其他什么?
ArK*_*ArK 24
压缩JSON删除json编码的键:值对,以便在单独的并行数组中存储键和值:
// 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' ]
};
Run Code Online (Sandbox Code Playgroud)
我在这里找到了这种使用方法
来自链接的内容(http://www.nwhite.net/?p=242)
很少发现自己在一个我正在编写以纯粹形式使用AJAX的javascript应用程序的地方.我早就放弃了'X'并用'J'(JSON)取而代之.使用Javascript时,返回JSON是有意义的.更小的占用空间,更容易的解析和更简单的结构都是我使用JSON后获得的优势.
在最近的一个项目中,我发现自己对结果集的大小不满意.我返回的数据是表格数据,每行的对象形式.我返回了50个结果集,每个结果有19个字段.我意识到如果我扩充我的结果集,我可以获得一种压缩形式.
//未压缩
JSON = {
data : [
{ field1 : 'data1', field2 : 'data2', field3 : 'data3' },
{ field1 : 'data4', field2 : 'data5', field3 : 'data6' },
.....
]
};
Run Code Online (Sandbox Code Playgroud)
//压缩
JSON = {
data : [ 'data1','data2','data3','data4','data5','data6' ],
keys : [ 'field1', 'field2', 'field3' ]
};
Run Code Online (Sandbox Code Playgroud)
我将所有值合并到一个数组中,并将所有字段存储在一个单独的数组中.为每个结果返回一个键值对花费了8800字节(8.6kb).将字段翻录并将它们放在一个单独的数组中需要花费186个字节.总节省8.4kb.
现在我有一个更加压缩的JSON文件,但结构不同,现在更难以使用.所以我在Mootools中实现了一个解决方案,使解压缩变得透明.
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){}
});
Run Code Online (Sandbox Code Playgroud)
将任意数量的充气对象传递给选项充气数组.它有一个名为'store'的可选属性.如果设置,膨胀的数据集将存储在该键中.
'keys'和'fields'希望字符串匹配JSON对象根目录中的位置.
归档时间: |
|
查看次数: |
9786 次 |
最近记录: |