JSON.parse()打破了对象功能

时间:2015-05-29 16:03:41

标签: javascript json

我有与JSON.stringify()串联的对象,然后用localstorage.setItem()保存,然后用localstorage.getItem()检索,然后用JSON.parse解析(),最后返回到程序中使用的对象数组。这是我的代码:

var exampleObjects = [];

function objectExample() {
    this.exampleFunction = function() {
            return this.otherObjectCreatedElsewhere.value;
    }
    this.otherObjectCreatedElsewhere;
}

function main() {
    exampleObjects[ 0 ] = new objectExample();
    exampleObjects[ 0 ].otherObjectCreatedElsewhere = otherObjectCreatedElsewhere;
    exampleObjects[ 0 ].exampleFunction(); //Works
    var save0 = JSON.stringify( exampleObjects[ 0 ] );
    localstorage.setItem( 'key', save0 );
    save0 = localstorage.getItem( 'key' );
    exampleObjects[ 0 ] = JSON.parse( save0 );
    exampleObjects[ 0 ].exampleFunction(); //No longer works, instead throws error exampleObjects[ 0 ].exampleFunction is not a function
}

main();

现在我用复活方法查找了JSON.parse,但我不能为我的生活搞清楚。我没有去过学校,这只是我的一个爱好,但是我已经培养了几年了。我真的很喜欢它,但是这些时间令人沮丧。

修改

我已经通过cloudfeet的宝贵建议解决了这个问题。基本上我从保存的JSON字符串中取出对象,然后将它们解析为对象,然后创建一个新对象并重新分配所有丰富的属性。

再次感谢!

1 个答案:

答案 0 :(得分:3)

JSON不是JavaScript。它使用JavaScript语法的有限子集,但它可以编码的唯一数据类型是:

  • 布尔
  • 字符串
  • object:从字符串映射到任何类型
  • array:值列表

(见http://json.org/

JSON 能够序列化功能。任何函数都将被省略(如private void button8_Click(object sender, EventArgs e) { connection.Open(); OleDbCommand command = new OleDbCommand(); command.Connection = connection; string query1 = "UPDATE Points SET PNTS = (case when EmpName = '" + comboBox1.Text + "' then '" + label15.Text + "' when EmpName = '" + comboBox2.Text + "' then '" + label16.Text + "' when EmpName = '" + comboBox3.Text + "' then '" + label17.Text + "' end) WHERE EmpName in ('" + comboBox1.Text + "', '" + comboBox2.Text + "', '" + comboBox3.Text + "')"; command.CommandText = query1; command.ExecuteNonQuery(); connection.Close(); } ),原型将被销毁等等。

所以:你需要做的是从你的富对象(用方法等)转换成JSON,然后再转换回来。

编辑:一个粗略的例子:

undefined

当您序列化时,您将获得function MyObj(name, age) { this.name = name; this.age = age; this.hello = function () { alert('Hello, ' + this.name + '!'); }; } - 没有{"name": "Sarah", "age": 38}条目。

所以,要解码,你需要解压缩它:

"hello"

这是一种简单的方法,解码逻辑是硬编码的 - 有很多方法可以让它变得更加漂亮,比如JSON.stringify()JSON.parse()的第二个参数,以及.toJSON()方法,但它的组织大致相同,组织方式不同。