JSON 方法对象转化成字符串结果为"{}"

问题:有一个方法对象需要转化成字符串显示在编辑器中,发现转化的结果是"{}"

clipboard.png

应用场景:需要将转化后的字符串放在代码编辑器中,用的插件是ace-builder。
最终实现结果: 能在ace-builder编辑器中编辑方法,编辑的保存结果还能够还原出来方法对象。

阅读 2.8k
2 个回答

undefined、任意的函数以及 symbol 值,在序列化过程中会被忽略(出现在非数组对象的属性值中时)或者被转换成 null(出现在数组中时),详情见JSON.stringify()

EwOigU.png
EwOAu4.png

function serialize(obj, name){
    var result = "";
    function serializeInternal(o, path) {
        for (p in o) {
            var value = o[p];
            if (typeof value != "object") {
                if (typeof value == "string") {
                    result += "\n" + path + "[" + (isNaN(p)?"\""+p+"\"":p) + "] = " + "\"" + value.replace(/\"/g,"\\\"") + "\""+";";
                }else {
                    result += "\n" + path + "[" + (isNaN(p)?"\""+p+"\"":p) + "] = " + value+";";
                }
            }
            else {
                if (value instanceof Array) {
                    result += "\n" + path +"[" + (isNaN(p)?"\""+p+"\"":p) + "]"+"="+"new Array();";
                    serializeInternal(value, path + "[" + (isNaN(p)?"\""+p+"\"":p) + "]");
                } else {
                    result += "\n" + path  + "[" + (isNaN(p)?"\""+p+"\"":p) + "]"+"="+"new Object();";
                    serializeInternal(value, path +"[" + (isNaN(p)?"\""+p+"\"":p) + "]");
                }
            }
        }
    }
    serializeInternal(obj, name);
    return result;
}

通过eval方法执行以上的语句就可以完整的还原a对象

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题