2015-12-13 115 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>');