【问题标题】:Setting an array of objects to sessionStorage将对象数组设置为 sessionStorage
【发布时间】:2012-09-15 18:42:56
【问题描述】:

好的,所以我有这个 JSON:

{"Status":"OK!","ListaPermessi":
[{"IdPermesso":10,"Nome":"WIND_PARAMS"},
 {"IdPermesso":11,"Nome":"ADMIN_SERVER"},
 {"IdPermesso":21,"Nome":"REC"},
 {"IdPermesso":22,"Nome":"REC_DIST"},
 {"IdPermesso":23,"Nome":"REC_DIST_CR"}
]}

我的代码是:

var parsedResult = JSON.parse(result); // where result is the above JSON
if (parsedResult.Status === "OK!") {
    // Set sessionStorage vars
    if (typeof(Storage) !== "undefined") {
        // localStorage & sessionStorage support!

        sessionStorage.setItem("ListaPermessi", parsedResult.ListaPermessi);
    }
    else {
        // Sorry! No web storage support :(
    }
}

但是...这不能正常工作!赋值后,从 Firebug 看到的 sessionStorage 是这样的:

会话存储

  • ListaPermessi = "[对象对象],[对象对象],[对象对象],[对象对象],[对象对象]

从 javascript 将对象数组分配给 sessionStorage 变量的正确方法是什么?

【问题讨论】:

    标签: javascript json session-storage


    【解决方案1】:

    您需要将其转回 JSON 字符串。您可以使用JSON.stringify 方法做到这一点:

    sessionStorage.setItem("ListaPermessi", JSON.stringify(parsedResult.ListaPermessi));
    

    原因是网络存储只能存储字符串,而Object 的默认toString 方法返回,如您现在所见,“[object Object]”。


    旁注:typeof 是运算符,而不是函数,因此不需要括号:

    if (typeof Storage !== "undefined") { //...
    

    【讨论】:

    • 感谢您的快速回答!但是,还是不行!我已经尝试过了,它将列表解析为字符串,而不是对象数组。
    • @CosminT。 - 你的意思是? JSON.stringify(parsedResult.ListaPermessi) 的结果是什么?
    • @CosminT。 - 这就是你应该得到的。您只能将字符串存储在网络存储中。您可以对该值调用 JSON.parse 以将其转换回实际的 JS 数据结构。
    • 这就是我一直在寻找的答案!所以它不能有“数组结构”。非常感谢!
    • @CosminT。 - 不客气,很高兴我能帮上忙 :) 请记住在存储时始终拨打JSON.stringify,在从网络存储中检索数据时拨打JSON.parse
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 2018-11-05
    • 2014-01-18
    • 2021-10-14
    • 2020-08-10
    • 1970-01-01
    相关资源
    最近更新 更多