[原创]用递归写的一个object 转换成JSON的函数
这段时间可把JavaScript学得透彻了,发现还是非常好用的。
我在网上找了很多这样的例子,发现都写的好多,总感觉应该是很简单的,想想应该用递归调用一下应该不难吧,后来自己试了一下还算不难,看来学好算法还是有好处的,呵呵(自夸一下)
利用了Javascript的反射机制(JavaScript真是太强了)与递归的算法很方便就把功能实现了。
好了,共享出来给大家做个参考:
本方法支持子对象,数组等多种形式。字符、数字、布尔型变量都可以识别。
function json_from_object(o)
{
if(o == null)
return 'null';
var s = '';
switch(typeof(o))
{
case 'object':
if(o.constructor == Array) // checks if it is an array [,,,]
{
for(var i=0; i<o.length; ++i)
{
s += json_from_object(o[i]);
if(i < o.length -1)
s += ',';
}
return '[' + s + ']';
}
else
{
for(var p in o)
{
if(typeof(o[p])!="function"){
s += "'" + p +"':" + json_from_object(o[p]);
s += ',';
}
}
return '{' + s.substring(0,s.length-1) + '}';
}
break;
case 'string':
return '\'' + o.replace(/(["\\])/g, '\\$1') + '\'';
default:
return String(o);
}
}
{
if(o == null)
return 'null';
var s = '';
switch(typeof(o))
{
case 'object':
if(o.constructor == Array) // checks if it is an array [,,,]
{
for(var i=0; i<o.length; ++i)
{
s += json_from_object(o[i]);
if(i < o.length -1)
s += ',';
}
return '[' + s + ']';
}
else
{
for(var p in o)
{
if(typeof(o[p])!="function"){
s += "'" + p +"':" + json_from_object(o[p]);
s += ',';
}
}
return '{' + s.substring(0,s.length-1) + '}';
}
break;
case 'string':
return '\'' + o.replace(/(["\\])/g, '\\$1') + '\'';
default:
return String(o);
}
}
调用实例也很简单:
function Test1() {
this.sName = '';
this.sCode = '';
this.iNum = 0;
}
var obj=new Test1();
obj.sName = "lbq";
obj.sCode = "1111";
obj.iNum = 100;
alert( json_from_object(obj));