|
Вывод JSON Объекта из localStorage
Вобщем надо вывести все объекты из локалстоража...Если применяю $.parseJSON(); к переменной value - выдает undefined, если нет, то выводит тупо весь JSON объект из значения строкой. Что не так?
// JavaScript Document $(document).ready(function(){ function isLocalStorageAvailable(){ try { return 'localStorage' in window && window['localStorage'] !== null; } catch (e) { return false; } } try { //localStorage.setItem('foo', 'bar'); } catch (e) { if (e == QUOTA_EXCEEDED_ERR) { alert('Локальное хранилище переполнено'); } } $.getJSON( 'json/posts.json', function(data){ var posts = ''; $.each(data, function(postIndex, post) { localStorage.setItem('post_id'+post['id'], JSON.stringify(post)); posts += localStorage['post_id'+post['id']]; //var local = $.parseJSON(posts); //alert(local); }) var ololo = $.parseJSON(localStorage['post_id1']); alert(ololo.title); var obj = window.localStorage; for(var key in obj){ value = localStorage[key]; alert(key +'=>'+value); alert('Ошибка где-то до этой строки.'); }; for (var i = 0; i < localStorage.length; i++) { alert(localStorage[i] + " = " + $.parseJSON(localStorage[localStorage[i]])); $.each($.parseJSON(localStorage[localStorage[i]]), function(eIndex, e) { alert(e.title); }); } //for(var i=1, len=localStorage.length; i<len; i++) { // var value = $.parseJSON(localStorage['post_id'+i]); // $.each(value, function(eIndex, e) { // alert(e.title); // }); //} //var local = $.parseJSON(posts); alert(posts); //posts += localStorage.setItem('posts', JSON.stringify(data)) //var local = $.parseJSON(localStorage.getItem('posts')); //formatposts = $.parseJSON(posts); //alert(formatposts); //for(i=0; i<posts.length; i++){ // alert(posts[i]); //} $.each(posts, function(entryIndex, entry) { var post = '<article><header><h3>'; post += entry['title']+'</h3></header><section><p>'; post += entry['body']+'</p></section><footer>'; if(entry['tags']){ post += '<div id="tags">'; $.each(entry['tags'], function(tagIndex, tag){ post += '<span class="label">' + tag + '</span>' }); post += '</div><div class="controls"><a class="btn btn-danger btn-mini">удалить</a></div>'; } post += '</footer></article>'; $('#posts').append(post); }); }); }); Вот можете посмотреть сами http://smirnoff.ho.ua/JSUI/ |
JSON !== объект.
Вы формат соблюли? |
разве? Хм...подскажите тогда в чем ошибка, как мне исправить код?
|
попробуйте превращать строку в объект
JSON.parse(..) // или так eval("("+ .... +")"); |
Так я же так и превращаю через $.parseJSON(), и мне выдает [Object object] вместо значений ключа, в перемечшку с кучей undefined и в самом конце один раз таки выводит заголовки
|
объекты вложенные? т.е. есть такое, что значением является объект?если да, то это плохо
|
Эм..ну собственно каждое значение JSON объект, причем в каждом есть значение, являющееся массивом. Т.к. хранилище заполняется из JSON файла. Вот код JSON файла собственно, дабы лучше понять картину:
[ { "id": 1, "title": "Стремящийся наибольший", "body": "Поле направлений нейтрализует коллинеарный полином, откуда следует доказываемое равенство.", "tags": [ "тег", "еще тег" ] }, { "id": 2, "title": "Эффузивный топаз", "body": "Поскольку плиты перестали сближаться, гейзер сдвигает кимберлит, в соответствии с изменениями в суммарной минерализации.", "tags": [ "коренной цоколь", "дифференциация", "апатит" ] }, { "id": 3, "title": "Звукорядный октавер", "body": "Ретро монотонно диссонирует форшлаг, и здесь в качестве модуса конструктивных элементов используется ряд каких-либо единых длительностей.", "tags": [ "конструктивный соноропериод", "движение" ] }, { "id": 4, "title": "Спиральный фотон", "body": "Любое возмущение затухает, если взрыв ненаблюдаемо искажает экранированный электрон, и это неудивительно, если вспомнить.", "tags": [ "сверхновая", "гидродинамический удар" ] } ] А почему плохо? И да, если что в верху страницы собственно видно требование задания. В хранилище я сделал запись каждого поста, т.е. каждого объекта, и выглядит следующим образом: post_id1 => {"id":1,"title":"Стремящийся наибольший","body":"Поле направлений нейтрализует коллинеарный полином, откуда следует доказываемое равенство.","tags":["тег","еще тег"]} |
Здесь да, это я специально тестил и выводил отдельный пост
|
Хм...у Вас в конце перебирается переменная data в которой JSON массив, а надо же перебирать локалстораж, ведь посты будут добавлятся, удалятся и соответственно выводить надо работая ТОЛЬКО с локалсторажем. Заполнили в первый раз значениями базовыми из JSON файла, и все далее только с локалсторажем работаем
|
ошибки вот здесь :
for (var i = 0; i < localStorage.length; i++) { alert(localStorage[i] + " = " + $.parseJSON(localStorage[localStorage[i]])); $.each($.parseJSON(localStorage[localStorage[i]]), function(eIndex, e) { alert(e.title); }); } ибо i - число, и localStorage[ число ] не существует, ибо сохраняли с ключом вида 'post_id'+post['id'] и итерация начинается с нуля, а ID'шники погут случайным образом попадаться, т.е. простой итерацией тут не спастись. но, ели хотите, можно так: i + 1. идем далее. $.parseJSON(localStorage[localStorage[i]] это что такое? допустим i исправили, localStorage["post_id"+(i+1)] возвратит строку объекта. далее получаем undefined из внешнего (первого слева) localStorage, и пытаемся из этого undefined взять JSON. ошибочка. вот так пойдёт $.parseJSON(localStorage["post_id" + (i + 1)]) |
Часовой пояс GMT +3, время: 22:39. |
|