簡體   English   中英

Javascript:嘗試訪問JSON數組的元素會給我個性化的角色

[英]Javascript: Trying to access elements of a JSON array gives me individual characters

$.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:

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

這給了我一個JSON對象數組,例如: [{'name':'Bob',...}] 但是,當我嘗試訪問數組的第一個元素: json[0] ,我得到'[' ,當我嘗試json[0].name我得到了undefined json的長度報告為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)

您正在對已經字符串化的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對象轉換為相應的原始值。
  • 如果未定義,則在轉換期間遇到函數或符號,或者省略(當在對象中找到它時)或者刪除為null(當它在數組中找到時)。 傳入“純”值(如JSON.stringify(function(){})或JSON.stringify(undefined)時,JSON.stringify也可以返回undefined。
  • 即使使用replacer函數,也將完全忽略所有符號鍵控屬性。
  • 不可枚舉的屬性將被忽略

例子 :

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

資料來源:MDN

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM