Javascript 对象序列化函数

Javascript object serialization function

本文关键字:函数 序列化 对象 Javascript      更新时间:2023-09-26

我需要一個可以序列化類型為{"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".constructor === 数组是错误的,因为它被解释为函数而不是数组。这是完整的代码,您可以在其中看到发生的情况。

<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>

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

尝试使用 JSON 3。它是用于window.JSON的填充库。它公开了JSON.stringifyJSON.parse方法。