现在的位置: 首页 > 综合 > 正文

【common】JavaScript —– 对象转化为json字符串

2013年10月09日 ⁄ 综合 ⁄ 共 2100字 ⁄ 字号 评论关闭

parse用于从一个字符串中解析出json对象

var str = '{"name":"张飞","age":"23"}'

结果:

JSON.parse(str)

Object
  1. age"23"
  2. name"张飞"
  3. __proto__Object


注意:单引号写在{}外,每个属性名都必须用双引号,否则会抛出异常。


stringify()用于从一个对象解析出字符串,如

var a = {a:1,b:2}

结果:

JSON.stringify(a)

"{"a":1,"b":2}"

//字符串转对象
function str2obj(json){
     return eval("(" + json + ")");
}

//对象转字符串
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();
}

抱歉!评论已关闭.