【问题标题】:Encoding JavaScript object to JSON将 JavaScript 对象编码为 JSON
【发布时间】:2013-10-02 15:18:24
【问题描述】:

我有问题。我试图将 JavaScript 对象编码为 JSON。这是我的 Sencha 应用程序数据库对象的预览图像:



我需要把它放到本地会话中,所以我必须对这个对象进行编码。我尝试使用:

  1. JSON.stringify(db)
    而我的结果只有:
    {"version":"1.0"}

  2. Ext.Encode(db) - 这是 Sencha 的函数
    结果我得到了:
    未定义

'db' 是屏幕上的一个对象。

需要用所有数据对该对象进行编码。

请帮帮我

[编辑]

有没有其他方法可以将 JS 对象转换为字符串并将其放入本地或会话存储中?因为对象不能存储在会话或本地存储中

【问题讨论】:

  • 看起来db 不是一个对象字面量,而是一个函数/类实例
  • 我不认为你可以将函数编码成 json
  • 有没有其他方法可以将JS对象转换为字符串并放入本地或会话存储中?因为对象不能存储在会话或本地存储中

标签: javascript json extjs


【解决方案1】:

JSON.stringify 方法不会转换函数或空/未定义变量,在您的对象中,您只有属性“版本”作为字符串值,其他属性是函数和原型。

If undefined, a function, or an XML value is encountered during conversion it is either omitted (when it is found in an object) or censored to null (when it is found in an array).

要了解有关 JSON.stringify 的更多信息,您可以阅读以下内容:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

关于 EXT,确保 db 对象标识在 ext 范围内声明。

【讨论】:

  • 好的,谢谢。这解释了为什么它不起作用。有什么方法可以将带有属性、函数和原型的 JavaScript 对象转换成 JSON 吗?
  • @user2837459 这里的问题是为什么要将方法转换为字符串?如果是以后可以调用的库,最好只使用本地存储来存储数据,注意:localstorage是有限存储,解析对象会消耗处理。
  • 因为我需要存储 openDatabase() 方法返回的对象实例,并在重新加载我的应用程序后使用它。
  • @user2837459 很好,但是您可以在需要时重新打开连接,为什么要存储连接变量?
  • 在我的应用程序中,我正在打开和关闭另一个 webView,之后从 openDatabase() 返回的数据库对象不同。所以我将我的数据库的第一个实例存储在全局变量中,但是当我必须重新加载应用程序时,这个对象消失了。这就是我要存储此连接变量的原因。
【解决方案2】:

Ext.Encode 旨在用于路由参数,如您在this example 中所见 JSON.stringify 旨在用于从 javascript 对象构造 JSON 字符串。

两者都做不同的事情,你想在这里实现什么?

至于为什么 Ext.Encode 返回 undefined: 'db' 是一个对象,还是别的什么? 也许是因为您的对象中有函数属性。我不知道 Ext.Encode 是如何实现的,但它们可能只允许简单的属性。 这可以解释为什么 Ext.Encode 不起作用但 JSON.stringify 起作用。 (JSON.stringify 在函数属性等方面更宽松一些)

【讨论】:

猜你喜欢
  • 2012-06-10
  • 2018-11-30
  • 2011-10-12
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2021-05-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多