2015-12-13 112 views
-2

我試圖存儲在本地存儲器中的JSON字符串和在另一功能中檢索的值,但它不是按預期方式工作JSON數組長度returing串長度

爲了存儲

var data = '{"history":['+'{"keyword":"'+key+'","msg":"'+msg+'","ver":"'+ver+'"}]}'; 
      localStorage.setItem("history",JSON.stringify(data)); 

對於retriving

var historydata = JSON.parse(localStorage.getItem("history")); 

試圖使用historydata.length和其示出圖57(其考慮JSON陣列作爲單個字符串和表示它的長度)我想要的芳ray尺寸

+2

你已經有一個JSON字符串。在'JSON.stringify'之後,你從一個字符串中得到一個字符串。 –

+0

@NinaScholz,你應該發佈這個答案。 –

回答

2

您嘗試存儲的變量已經是json編碼的字符串。你不能再stringify

你可以放棄那些'並重新格式化json,那麼它將是一個普通的json,那麼你可以撥打stringify就可以了。

var data = {"history":[{"keyword":key,"msg":msg,"ver":ver}]}; 
localStorage.setItem("history", JSON.stringify(data)); 

要得到數組的長度檢索後:

var historydata = JSON.parse(localStorage.getItem("history")); 
console.log(historydata.history.length); 
+0

是的,編輯後不會看起來更好;) – kriskot

1

您已經在JSON字符串。在JSON.stringify之後,您從字符串中獲取一個字符串。

數組的大小是1,因爲內容在一個對象中。

var key = 'KEY', msg = 'MSG', ver = 'VER', 
 
    data = '{"history":[' + '{"keyword":"' + key + '","msg":"' + msg + '","ver":"' + ver + '"}]}', 
 
    obj = JSON.parse(data); 
 
document.write(obj.history.length + '<br>'); 
 
document.write('<pre>' + JSON.stringify(obj, 0, 4) + '</pre>');

也許你認爲更好的使用對象,像一個對象文本:

var key = 'KEY', msg = 'MSG', ver = 'VER', 
 
obj = { history: [{ keyword: key, msg: msg, ver: ver }] }; \t \t \t 
 
document.write('<pre>' + JSON.stringify(obj, 0, 4) + '</pre>');