【问题标题】:How to JSON.stringify and JSON.parse without getting an empty object?如何在不获取空对象的情况下进行 JSON.stringify 和 JSON.parse?
【发布时间】:2013-05-05 18:35:53
【问题描述】:

我问这个问题的原因是因为我想为我的对象使用 LocalStorage。您可能知道,在使用 LocalStorage 时,您必须对对象进行 JSON.stringify 处理,然后将它们解析回 javascript 对象。

我正在尝试使用方法对对象进行 JSON.stringify,然后将其解析回来,但我得到的只是一个空对象。

请看一下这段代码。

Person.js

function Person(name, telePhone) {

this.getName = function () {
    return name;
}

this.setName = function (_name) {
    name = _name;
}

this.getTelePhone = function () {
    return telePhone;
}

this.setTelePhone = function (_telePhone) {
    telepPhone = _telePhone;
}
};

Javascript.js

window.onload = function () {

var name = "John";
var telePhone = "073-2335662";

var personObject = new Person(name, telePhone);

console.log(personObject);
// returns: Person 
console.log(personObject.getName());
//returns: John

var test = JSON.stringify(personObject);
var newPersonObject = JSON.parse(test);

console.log(newPersonObject);
//returns: Object
console.log(newPersonObject.getName());
//returns: Uncaught TypeError: Object #<Object> has no method 'getName'
};

有什么建议为什么 JSON.stringify 和 JSON.parse 之后的这个 Person 对象是空的并且丢失了它的所有方法?

【问题讨论】:

    标签: javascript jquery json html local-storage


    【解决方案1】:

    函数不是有效的 JSON 数据类型。当然,函数持有的变量范围是不能序列化的。

    您需要将数据直接存储在对象上以对其进行序列化。

    JSON 有 "object" (key/value pair) 和 "array" (ordered list) 风格的结构,还有string, number, truefalsenull

    http://json.org/

    【讨论】:

    • 非常感谢。我猜 Person.js 文件看起来应该与常规对象属性不同?
    • @Axel:是的,如果你最终想要序列化数据,数据需要直接在对象上,并且需要是 JSON 支持的有限数据子集的一部分。
    【解决方案2】:

    JSON.stringify 不会序列化函数,因为它们不是数据。 JSON 仅存储真实数据及其结构——特别是变量。 如果您还想存储函数,可以使用.toString() 方法将函数源代码转换为字符串,并将其转换回函数,您可以使用 eval() 重新创建方法,但这是一个单独的问题.

    您可能必须编写自己的序列化程序来执行此类任务,这个想法非常有趣,如果有现成的解决方案,我不会感到惊讶。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-05
      • 2011-02-03
      • 1970-01-01
      • 1970-01-01
      • 2014-05-02
      • 1970-01-01
      • 2016-03-09
      • 2014-07-06
      相关资源
      最近更新 更多