/**
* 传入对象或数组生成json字符串
* json数据中的数组 定义 键名 从0开始 连续不间断,且为升序的 为数组[注:json中的关联数组统称为对象]
* json数据中的对象 定义
* o object或 array
* 返回json字符串
* 2015-02-06
*/
function jsonStr(o) {
var arr = [], left = '', right = '';
var o_is_arr = 1; //标记o是否是一个数组 1是数组 其他不是数组[统称对象]
var o_type = Object.prototype.toString.call(o);
if (o_type != '[object Array]' && o_type != '[object Object]') {//o既不是数组又不是对象是直接反回o
return o;
}
var i = 0;
for (var k in o) {
if (i != k) {
o_is_arr = 2;
}
i++;
}
if (i < 1) {//o长度小于1时
return Object.prototype.toString.call(o) == '[object Array]' ? '[]' : '{}';
}
if (o_is_arr == 1) {//是数组
left = '[', right = ']';
} else {//是对象
left = '{', right = '}';
}
for (var k in o) {
if (typeof o[k] == 'object') {
if (o_is_arr == 1) {//是数组
arr.push(arguments.callee(o[k]));
} else {//是对象
arr.push('"' + k + '":' + arguments.callee(o[k]));
}
} else {
if (o_is_arr == 1) {//是数组
arr.push('"' + o[k] + '"');
} else {//是对象
arr.push('"' + k + '":"' + o[k] + '"');
}
}
}
return left + arr.join(',') + right;
}
/**
* 解析json字符串
* @param {type} data
* @returns {Function|@exp;window@pro;JSON@call;parse}
*/
function jsonParse(data) {
if (window.JSON && window.JSON.parse) {
return window.JSON.parse(data);
}
if (data === null) {
return data;
}
return (new Function("return " + data))();
}
/**
* 传入对象或数组生成json字符串
* json数据中的数组 定义 键名 从0开始 连续不间断,且为升序的 为数组[注:json中的关联数组统称为对象]
* json数据中的对象 定义
* o object或 array
* 返回json字符串
* 2015-02-06
* 此方法相比于 jsonStr() 方法结省了cpu确多耗用了内存
*/
function jsonStr2(o) {
var arr1 = [];//存数组
var arr2 = [];//存对象
var left = '', right = '';
var o_type = Object.prototype.toString.call(o);
if (o_type != '[object Array]' && o_type != '[object Object]') {//o既不是数组又不是对象是直接反回o
return o;
}
var i = 0;
var is_array = 1; //标记o是否是一个数组 1是数组 其他不是数组[统称对象]
left = '[', right = ']';//默认o以数组型式表标
for (var k in o) {
if (i != k) {//检测o是否需要以对象型式表示
is_array = 2;
left = '{', right = '}';
}
if (typeof o[k] == 'object') {
arr1.push(arguments.callee(o[k]));
arr2.push('"' + k + '":' + arguments.callee(o[k]));
} else {
arr1.push('"' + o[k] + '"');
arr2.push('"' + k + '":"' + o[k] + '"');
}
i++;
}
if (i < 1) {//o长度小于1时
return Object.prototype.toString.call(o) == '[object Array]' ? '[]' : '{}';
} else if (is_array == 1) {
return left + arr1.join(',') + right;
} else {
return left + arr2.join(',') + right;
}
}