Skip to content

Instantly share code, notes, and snippets.

@floydpink
Created December 5, 2012 20:00
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save floydpink/4218984 to your computer and use it in GitHub Desktop.
Save floydpink/4218984 to your computer and use it in GitHub Desktop.
JSON Minification
var JSONKeyMinify = function (Array, JSON, undefined) {
"use strict";
// http://stackoverflow.com/questions/1988349/array-push-if-does-not-exist
// http://stackoverflow.com/questions/4433402/replace-keys-json-in-javascript
Array.prototype.inArray = function (comparer) {
for (var i = 0; i < this.length; i++) {
if (comparer(this[i])) return true;
}
return false;
};
Array.prototype.pushIfNotExist = function (element, comparer) {
if (!this.inArray(comparer)) {
this.push(element);
}
};
var _keys = [],
extractKeys = function (obj) {
if (typeof obj === 'object') {
for (var key in obj) {
if (!Array.isArray(obj)) {
_keys.pushIfNotExist(key, function (e) {
return e === key;
});
}
extractKeys(obj[key]);
}
}
},
encode = function (obj) {
if (typeof obj !== 'object') return obj;
for (var prop in obj) {
if (!Array.isArray(obj)) {
if (obj.hasOwnProperty(prop)) {
obj[_keys.indexOf(prop)] = encode(obj[prop]);
delete obj[prop];
}
} else {
obj[prop] = encode(obj[prop]);
}
}
return obj;
},
decode = function (obj) {
if (typeof obj !== 'object') return obj;
for (var prop in obj) {
if (!Array.isArray(obj)) {
if (obj.hasOwnProperty(prop)) {
obj[_keys[prop]] = decode(obj[prop]);
delete obj[prop];
}
} else {
obj[prop] = decode(obj[prop]);
}
}
return obj;
},
minify = function (json) {
extractKeys(json);
return { JKMKeys:_keys, JKMValues:encode(json) };
},
expand = function (minifiedJson) {
_keys = minifiedJson.JKMKeys;
return decode(minifiedJson.JKMValues);
};
return {
minify:minify,
expand:expand
};
}(Array, JSON);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment