2015-12-13 2 views
-2

я пытался хранить строку JSON в локальном запоминающем устройстве, и извлечение значения в другой функции, но ее не работает как ожидалосьJSON длина массива в JavaScript является 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 size

+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

yep, не выглядит лучше после редактирования;) – kriskot

1

Вы уже строку JSON. После JSON.stringify вы получите строку из строки.

Размер массива один, потому что содержание в одном объекте.

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>');

Смежные вопросы