Javascript对象序列化函数

Javascript对象序列化函数,javascript,json,Javascript,Json,我需要一个函数,它可以序列化类型为{“a”:“val”,“b”:{},“c”:[{}]}的对象,而不使用JSON.stringify(因为环境中根本没有JSON对象),或者使用jquery和任何其他库。下面的代码就是我现在所拥有的: function objToString(obj) { if (obj == null) return null; var index = 0; var str = '{'; for (var p in obj) {

我需要一个函数,它可以序列化类型为{“a”:“val”,“b”:{},“c”:[{}]}的对象,而不使用JSON.stringify(因为环境中根本没有JSON对象),或者使用jquery和任何其他库。下面的代码就是我现在所拥有的:

function objToString(obj) {
    if (obj == null) return null;
    var index = 0;
    var str = '{';
    for (var p in obj) {
        if (obj.hasOwnProperty(p)) {
            str += index != 0 ? "," : "";
            str += '"' + p + '":' + (typeof (obj[p]) == 'object' ? objToString(obj[p]) : itemToJsonItem(obj[p]));
            index++;
        }
    }
    str += "}";
    return str;
}

function itemToJsonItem(item) {
    return isNaN(item) ? '"' + item + '"' : item;
}
此函数可以处理对象、嵌套对象,但不能处理数组。上述对象中的节点“c”看起来像“c”:{“0”:{…}},而不像数组。不足为奇的是“c”。构造函数===数组为false,因为它被解释为函数而不是数组。这是完整的代码,您可以在其中看到发生了什么

<div id="div_result"></div>

<script>
    var test = { "a": "val", "b": [{"c":"val c"}]};

    function objToString(obj) {
        if (obj == null) return null;
        var index = 0;
        var str = '{';
        for (var p in obj) {
            if (obj.hasOwnProperty(p)) {
                str += index != 0 ? "," : "";
                str += '"' + p + '":' + (typeof (obj[p]) == 'object' ? objToString(obj[p]) : itemToJsonItem(obj[p]));
                index++;
            }
        }
        str += "}";
        return str;
    }

    function itemToJsonItem(item) {
        return isNaN(item) ? '"' + item + '"' : item;
    }

    document.getElementById("div_result").innerHTML = objToString(test);
</script>

var测试={“a”:“val”,“b”:[{“c”:“val c”}]};
功能对象化(obj){
if(obj==null)返回null;
var指数=0;
var str='{';
用于(obj中的var p){
if(对象hasOwnProperty(p)){
str+=索引!=0?,“:”;
str+='“'+p+'”:'+(typeof(obj[p])=='object'?objToString(obj[p]):itemToJsonItem(obj[p]);
索引++;
}
}
str+=“}”;
返回str;
}
函数itemToJsonItem(item){
返回isNaN(项目)?“+”项目+“:项目;
}
document.getElementById(“div_结果”).innerHTML=objToString(测试);

我将非常感谢您的帮助,目前由每个对象内部的toSerialize函数创建的序列化对象,但我们希望使用外部的标准函数。

尝试使用。它是
window.JSON
的polyfill库。它公开了
JSON.stringify
JSON.parse
方法。

尝试使用。它是
window.JSON
的polyfill库。它公开了
JSON.stringify
JSON.parse
方法。

尝试使用。它是
window.JSON
的polyfill库。它公开了
JSON.stringify
JSON.parse
方法。

尝试使用。它是
window.JSON
的polyfill库。它公开了
JSON.stringify
JSON.parse
方法。

添加一些理由说明为什么
JSON.stringify
不是一个答案,这将有助于提供更多有用的答案。感谢您的建议,我做到了。希望能有帮助。你能使用吗?如果你能注入你自己的代码,你可以注入Crockford的JSON2。重新发明轮子很少有用。你可以得到一个JSON对象的多边形填充添加一些理由说明为什么
JSON。stringify
不是一个答案,应该可以帮助你得到更多有用的答案。谢谢你的建议,我做到了。希望能有帮助。你能使用吗?如果你能注入你自己的代码,你可以注入Crockford的JSON2。重新发明轮子很少有用。你可以得到一个JSON对象的多边形填充添加一些理由说明为什么
JSON。stringify
不是一个答案,应该可以帮助你得到更多有用的答案。谢谢你的建议,我做到了。希望能有帮助。你能使用吗?如果你能注入你自己的代码,你可以注入Crockford的JSON2。重新发明轮子很少有用。你可以得到一个JSON对象的多边形填充添加一些理由说明为什么
JSON。stringify
不是一个答案,应该可以帮助你得到更多有用的答案。谢谢你的建议,我做到了。希望能有帮助。你能使用吗?如果你能注入你自己的代码,你可以注入Crockford的JSON2。重新设计轮子很少有用。您可以为JSON对象获得一个多边形填充