2017-03-16 49 views
6
$.ajax({ 
    url: "get_cards.php", 
    type: "GET", 
    data: {selection:JSON.stringify(selection)}, 
    success: function(data) { 
     var json = JSON.parse(data); 
     sessionStorage.setItem("json", JSON.stringify(json)); 
    } 
}); 

然後,在另一個文件中,我從sessionStorage的檢索JSON:的Javascript:試圖訪問一個JSON數組的元素讓我單個字符

var json = JSON.parse(JSON.stringify(sessionStorage.getItem("json"))); 
if(json) { 
    sessionStorage.removeItem("json"); 
} 

這讓我JSON對象的數組,例如:[{'name':'Bob',...}]。但是,當我嘗試訪問數組的第一個元素時:json[0],我得到'[',當我嘗試json[0].name時,得到undefinedjson的長度被報告爲159,因此它將每個單獨的字符計數爲一個元素。

編輯:當我更新到:

var json = JSON.parse(sessionStorage.getItem("json")); 
if(json) { 
    sessionStorage.removeItem("json"); 
} 

我得到的長度1(這是正確的),但訪問錯誤時json[0].name

Uncaught TypeError: Cannot read property '0' of null 
at HTMLDocument.<anonymous> (studying.js:10) 
at j (jquery.min.js:2) 
at k (jquery.min.js:2) 
+0

你有一個字符串。使用'JSON。解析()'正確 – Weedoze

+0

你爲什麼要將它串起來再解析一遍? – Cruiser

+0

您已經將json字符串保存在本地存儲中,爲什麼要調用stringify兩次? – abhishekkannojia

回答

8

您字符串化已字符串化json:

var json = JSON.parse(JSON.stringify(sessionStorage.getItem("json"))); // wrong ! 

這應該是:

var json = JSON.parse(sessionStorage.getItem("json")); 

如果你JSON.stringify("foo"),那麼你得到一個帶引號的字符串:"\"foo\""

JSON.stringify()將數值轉換爲JSON符號表示它:非陣列對象的

  • 屬性,不能保證以任何特定的順序來字符串化 。不要依賴 中的屬性在字符串化中的相同對象的排序。字串中
  • BooleanNumberString對象被轉換爲相應的的原始值 ,在符合傳統轉換 語義。
  • 如果未定義,函數或符號在 轉換過程中遇到(或在對象中找到對象時)或 被刪除(當它在數組中找到時)。 JSON.stringify可以 還傳遞「純」值,如 JSON.stringify(函數(){})或JSON.stringify(未定義)時返回undefined。
  • 所有 符號鍵屬性將被完全忽略,即使使用替代函數 。
  • 不可枚舉的屬性將被忽略

例子:

JSON.stringify({});     // '{}' 
JSON.stringify(true);    // 'true' 
JSON.stringify('foo');    // '"foo"' 
JSON.stringify([1, 'false', false]); // '[1,"false",false]' 
JSON.stringify({ x: 5 });   // '{"x":5}' 

Source: MDN

+1

雖然它像'JSON.parse(JSON.stringify(sessionStorage.getItem( 「JSON」)))剛redundent代碼;'但字符串化字符串然後解析它爲json使它的值字符串?怎麼來的? –

+4

@AnikIslamAbhi:你總是找回原來的價值。原始值('sessionStorage.getItem(「json」)')是一個字符串。 'JSON.parse(JSON.stringify(「foo」))===「foo」'。 *「將其解析爲json」*沒有任何內容被解析*爲* JSON。 'JSON.stringify' *創建JSON *。 'JSON.parse'從JSON創建一個本地JavaScript值。如果一個字符串值被編碼爲JSON,你會得到一個字符串值。如果數字值被編碼爲JSON,則會得到一個數字值。如果一個數組被編碼爲JSON,你會得到一個數組等等。 –

+0

@FelixKling你太棒了 –

相關問題