【问题标题】:How to convert a complex javascript object to string and back如何将复杂的javascript对象转换为字符串并返回
【发布时间】:2012-05-30 00:47:21
【问题描述】:

我有一个对象,其中包含由其他数组组成的数组,它还包含方法。我面临的问题是由于多维数组和方法,我无法使用 JSon。

我想将其转换为字符串的原因是存储到 Iphone 的 本地存储。

您只能在其中存储文本,我希望有一种方法可以将有关用户的复杂对象存储为字符串,然后能够再次反序列化它。有没有办法做到这一点。我不太了解javascript,无法编写自己的api。这是我现在开始尝试研究的选项:(

【问题讨论】:

  • JSON 可以编码多维数组,但不能编码方法。
  • 你不能只保存 .js 脚本,然后在运行时尝试 eval() 它吗?但我不知道你是否真的可以从本地存储读取和执行。
  • 为什么要持久化你的方法?
  • 我来自 c++,参加了有关它的课程,所以在我看来,保持对象是有意义的。我想我可以将方法移到它自身的对象之外。我确实使用 Jquery。我想保留它们,以便在我重建对象时。我可以执行各种方法。一些方法是更新对象

标签: javascript string object serialization


【解决方案1】:

将其序列化为 JSON。您可以序列化/反序列化复杂的对象和数组。

您无法序列化方法(代码)。

对于本地存储持久性,我推荐Lawnchair

【讨论】:

  • @mplungjan 是的,因为alert() 在每个参数上都隐含了.toString()。 JSON 序列化程序将拒绝这样做。
  • 所以我们可以自己添加,不是吗?
  • @mplungjan - 但你为什么首先要持久化方法?
【解决方案2】:

无需存储在 localStorage 中,您可以在应用程序的任何位置使用全局数组尝试一次

【讨论】:

  • 不,我需要 localStorage,以便他们可以退出并稍后返回。该对象包含很多东西
【解决方案3】:

通常可以使用myfunc.toString() 序列化方法

所以,您可以JSON.stringify()JSON.parse() 中使用replacer 函数来识别方法,并在它们上调用.toString(),它们会在解析时以某种方式识别它们并打开它们回到一流的功能。

但是 - 请注意,重构的函数将无法访问原始对象的范围,即私有变量或方法等。

例如

function A() {
    var foo = 'bar';
    this.test = function test() { console.log(foo) };
};

var b = new A();
var f = b.test.toString();  // the text of the method
b.test2 = new Function(f);

b.test2();
> undefined

【讨论】:

    【解决方案4】:

    嗯, 有一种方法可以将带有函数的对象转换为字符串和虎钳诗句。看看这个插件:

    http://www.eslinstructor.net/jsonfn/

    祝你好运,

    -瓦迪姆

    【讨论】:

      猜你喜欢
      • 2015-09-24
      • 1970-01-01
      • 2011-09-09
      • 1970-01-01
      • 2019-12-17
      • 2021-09-19
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      相关资源
      最近更新 更多