能转化如下的数据:
case 1:
var o = {};
o.arr=[];
o.subo = {};
obj2str(o);
case 2:
var arr = [o];
obj2str(o);
case 3: 多层嵌套
var o = {};
//o.name="so'me";
o.so = {};
o.arr1=[{a:"我",b:"you",'c':123,'d':234,"e":{e1:[],e2:{}}}];
var arr = [o];
var s = obj2str(arr);
function obj2str(o,flag,replace){
var arr_start = "ARRAY_S";
var arr_end = "ARRAY_E";
if(flag==null){
flag = "\"";//默认是双引号
}
if(replace==null){
replace = true;
}
var r = [];
if(typeof o == "string" || o == null) {
return o;
}
//alert(typeof(o));
if(typeof o == "object"){
//alert(o.sort);
if(!o.sort){
//alert("in if");
r[0]="{";
for(var i in o){
//alert(i+"="+o[i]);
r[r.length]=flag;
r[r.length]=i;
r[r.length]=flag;
r[r.length]=":";
r[r.length]=flag;
r[r.length]=obj2str(o[i],flag,false);
r[r.length]=flag;
r[r.length]=",";
}
r[r.length-1]="}";
}else{//数组元素
r[0]= arr_start;
for(var i =0;i<o.length;i++){
r[r.length]=flag;
r[r.length]=obj2str(o[i],flag,false);
r[r.length]=flag;
r[r.length]=",";
}
r[r.length-1]=arr_end;
}
var str = r.join("");
//alert("结果:"+str);
//针对{} 就是没有属性的对象,会返回单个 },把它补齐
if(str=="}"){
str="{}";
}
//针对[] 就是长度为0的数组,会返回单个 ],把它补齐
if(str==arr_end){
str=arr_start+arr_end;
}
if(replace){//在递归子循环中不替换,到最后统一替换
//替换掉 "{ }" "[ ]"
var reg=new RegExp(flag+"{","g"); // 包含字符 "{
str = str.replace(reg,"{");
reg=new RegExp("}"+flag,"g");// 包含字符 }"
str = str.replace(reg,"}");
reg=new RegExp(flag+arr_start,"g"); // 包含字符 "[
str = str.replace(reg,"[");
reg=new RegExp(arr_end+flag,"g"); // 包含字符 ]"
str = str.replace(reg,"]");
//alert(str);
if(str.indexOf(arr_start+"{")>-1){
reg=new RegExp(arr_start+"{","g");
str = str.replace(reg,"[{");
}
if(str.indexOf("}"+arr_end)>-1){
reg=new RegExp("}"+arr_end,"g");
str = str.replace(reg,"}]");
}
}
//alert("--"+str);
return str;
}
return o.toString();
}
function str2obj(json){
return eval("("+json+")");
}