JSON对象转化为字符串 - 依水间

时间:2024-03-07 13:22:57

JSON对象转化为字符串

2011-12-23 15:19  依水间  阅读(710)  评论(0编辑  收藏  举报

由于工作需要,要在JS端将JSON对象转化为字符串,并写到用户的COOKIE中,用来保存用户的一些个人操作习惯。便在网上搜寻了一遍,发现方法有很多,有些代码不清晰,看得乱,有些考虑不周全,生成的字符串有问题,便整合了一些好的写法,自己改进了一下。可能还是考虑得不周全,但是感觉常用的类型都考虑了,望大家多多拍砖指点!

JSON.stringify(jsonobj),本来是最简便的方法,可是存在浏览器兼容问题(仅适用于IE8+,Chrome 1+,FF 3+)。

var O2String = function (O) {
//return JSON.stringify(jsonobj);

var S = [];
var J = "";
if (Object.prototype.toString.apply(O) === \'[object Array]\') {
for (var i = 0; i < O.length; i++)
S.push(O2String(O[i]));
J = \'[\' + S.join(\',\') + \']\';
}
else if (Object.prototype.toString.apply(O) === \'[object Date]\') {
J = "new Date(" + O.getTime() + ")";
}
else if (Object.prototype.toString.apply(O) === \'[object RegExp]\' || Object.prototype.toString.apply(O) === \'[object Function]\') {
J = O.toString();
}
else if (Object.prototype.toString.apply(O) === \'[object Object]\') {
for (var i in O) {
O[i] = typeof (O[i]) == \'string\' ? \'"\' + O[i] + \'"\' : (typeof (O[i]) === \'object\' ? O2String(O[i]) : O[i]);
S.push(i + \':\' + O[i]);
}
J = \'{\' + S.join(\',\') + \'}\';
}

return J;
};



/*-----------------------以下是测试代码-----------------------*/

var jsonStr = O2String(
[
{
"Page": "plan",
"Custom":
[
{
"ItemName": "CustomLabel1",
"ItemContent": 1,
"IsItem": true,
"ItemDate": new Date(1320774905467),
"ItemReg": /[\w]*?/gi,
"ItemFunc": function () { alert("ItemFunc"); }
},
{
"ItemName": "CustomLabel1",
"ItemContent": 1,
"IsItem": true,
"ItemDate": new Date(1320774905467),
"ItemReg": /[\w]*?/gi,
"ItemFunc": function () { alert("ItemFunc"); }
}
]
},
{
"Page": "project",
"Custom":
[
{
"ItemName": "CustomLabel2",
"ItemContent": 2,
"IsItem": false,
"ItemDate": new Date(1320774905467),
"ItemReg": /[\w]*?/gi,
"ItemFunc": function () { alert("ItemFunc"); }
},
{
"ItemName": "CustomLabel2",
"ItemContent": 2,
"IsItem": false,
"ItemDate": new Date(1320774905467),
"ItemReg": /[\w]*?/gi,
"ItemFunc": function () { alert("ItemFunc"); }
}
]
}
]
);
alert(jsonStr);
var jsonObj = eval("(" + jsonStr + ")");
alert(jsonObj.length);