将对象数组设置为sessionStorage

Tes*_*lo. 8 javascript json session-storage

好的,所以我有这个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"}
]}
Run Code Online (Sandbox Code Playgroud)

我的代码是:

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 :(
    }
}
Run Code Online (Sandbox Code Playgroud)

但是......这不能正常工作!在分配之后,从Firebug看到的sessionStorage看起来像这样:

sessionStorage:

  • ListaPermessi =" [object Object],[object Object],[object Object],[object Object],[object Object] "

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

Jam*_*ice 22

您需要将其重新转换为JSON字符串.您可以使用以下JSON.stringify方法执行此操作:

sessionStorage.setItem("ListaPermessi", JSON.stringify(parsedResult.ListaPermessi));
Run Code Online (Sandbox Code Playgroud)

这样做的原因是Web存储只能存储字符串,以及返回的默认toString方法Object,如您现在所见,"[object Object]".


旁注:typeof是一个操作符,而不是一个函数,因此不需要括号:

if (typeof Storage !== "undefined") { //...
Run Code Online (Sandbox Code Playgroud)

  • @CosminT。- 不客气,很高兴我能帮上忙:) 请记住在存储时总是调用`JSON.stringify`,在从网络存储检索数据时调用`JSON.parse`。 (2认同)