javascript json to string

本文介绍了一种在JavaScript中将复杂对象转换为字符串的方法,并提供了详细的实现代码。该方法可以处理多层嵌套的对象及数组,同时确保了转换过程中的格式正确性和数据完整性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

能转化如下的数据:

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+")");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值