繁体   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