2013-10-02 340 views
1

我遇到了問題。我試圖將JavaScript對象編碼爲JSON。這裏是我的Sencha應用數據庫對象的預覽圖像:

http://s11.postimg.org/ttelg6u0z/Przechwytywanie.png

我需要把它放到本地會話中,所以我必須編碼這個對象。我試着使用:
將JavaScript對象編碼爲JSON

  1. JSON.stringify(DB)
    ,我的結果是唯一的:
    { 「版本」: 「1.0」}

  2. Ext.Encode (db) - 這是Sencha的功能
    結果我得到了:
    undefinied

'db'是來自屏幕的對象。

需要使用所有數據對此對象進行編碼。

請幫我

[編輯]

是任何其他方式JS對象轉換爲字符串,並把它放到本地或會話存儲?因爲對象不能存儲在會話或本地存儲中

+0

看起來像'db'不是一個對象字面值,而是一個函數/類實例 – Phil

+0

我不認爲你可以將函數編碼到json中 – Jianhong

+0

是否有其他的方式來將JS對象轉換爲字符串並將其放入本地或會話存儲?因爲對象不能存儲在會話或本地存儲中 – user2837459

回答

1

JSON.stringify方法不會轉換函數或null/undefined變量,在您的對象中只有屬性「version」作爲字符串值,其他屬性是功能和原型。

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,確保數據庫對象標識是在內線範圍內聲明。

+0

好的,謝謝。這解釋了爲什麼它不起作用。是否有任何方法將JavaScript對象與屬性,函數和原型轉換爲JSON? – user2837459

+0

@ user2837459這裏的問題是爲什麼你想要將方法轉換爲字符串?如果它是一個庫,可以稍後調用它,那麼最好使用本地存儲來存儲數據, 注意:localstorage是有限的存儲空間,解析對象會消耗處理空間。 –

+0

因爲我需要存儲由openDatabase()方法返回的對象實例,並在重新加載我的應用程序後使用它。 – user2837459

0

Ext.Encode旨在用於路由參數,如您在this example中看到的 JSON.stringify旨在用於從javascript對象構建JSON字符串。

兩者都做不同的事情,你想在這裏實現什麼?至於爲什麼Ext.Encode返回undefined:'db'是一個對象,還是其他的東西? 也許是因爲你的對象有函數屬性。我不知道Ext.Encode是如何實現的,但它們可能只允許簡單的屬性。 這將解釋爲什麼Ext.Encode不起作用,但JSON.stringify。 (JSON.stringify在功能屬性等方面稍微寬鬆一點)

+0

是的,它是一個對象。我不知道爲什麼它是未定義的。 Ext.Encode可以將JS對象轉換爲JSON。這裏的例子:http://docs.sencha.com/core/manual/content/utility.html#util-json – user2837459

+0

但我不知道爲什麼它不起作用在我的情況 – user2837459