|
JSON localStorage
Привет всем встала задача сделать Json массив по которому будет храниться некоторая информация а точнее.
1. Создается Массив JSon 2. Дополняем массив 3. Если необходимо удаляем из массива не нужные параметры 4. Сравниваем массив на изменения и обновляем его. PS. На чистом JS без jQuery По 1 пункту это мне далось легко: var tovar_list = [{ "tovar":"tovar_26", "price":"266" }]; localStorage.setItem("tovar_list",JSON.stringify(tovar_list)); По 2 пункту как всегда наш о великий Google стал помогать: var tovar_list = [{ "tovar":"tovar_27", "price":"362" }]; if (localStorage.getItem("tovar_list ")) { alert('Вывод'); var data = {}; data = localStorage.getItem("tovar_list ");// Вытаскиваем массив if (data>''){stavka = JSON.stringify(tovar_list)+','+JSON.stringify(stavka)} alert (JSON.stringify(stavka) ); localStorage.setItem("tovar_list ", tovar_list);// записываем полученный новый массив обьединеный }else{ localStorage.setItem("tovar_list ",JSON.stringify(tovar_list)); // Записываем массив если он пуст то пишем по умоланию alert('Запись '+ tovar_list); } И в итоге у меня появились какието слэши и с каждым добовление нового значение слэши увеличиваются "\"{\\\"tovar\\\":\\\"tovar_23\\\",\\\"price\\\":\ \\"3624\\\"}\",{\"tovar\":\"tovar_21\",\"price\":\ "424\"} И хотел бы уточнить чтобы это все было в JSON и было удобно долять элементы что можете подсказать, я не гуру но понимаю код и как всегда мы учимся чемуто новому |
Цитата:
var data = JSON.parse(localStorage.getItem("tovar_list "));// Вытаскиваем массив |
Цитата:
|
Цитата:
var data = {}; - объявлена переменная как объект, которая затем заменяется строкой data = localStorage.getItem("tovar_list "); Ну а что дальше будет бардак, пояснять не надо. |
Я переделал немного код на
if (localStorage.getItem("tovar_list")) { data = localStorage.getItem("tovar_list");// Вытаскиваем массив if (data>''){stavka = data+','+JSON.stringify(tovar_list)} alert (JSON.stringify(tovar_list) ); localStorage.setItem("tovar_list",tovar_list);// записываем полученный новый массив обьединеный }else{ localStorage.setItem("tovar_list",JSON.stringify(tovar_list)); // Записываем массив если он пуст то пишем по умоланию alert('Запись '+ tovar_list); } Теперь отображается "{\"tovar\":\"tovar_23\",\"price\":\"3624\"},{\"tovar\":\"tovar_21\",\"price\":\"424\"} Но я как понимаю что это не JSON формат а строковый, как тогда его сделать в JSON я уже запутался |
У вас массив объектов, следовательно по умолчанию должен быть массив. Вот так: есть сохраненный, значит получаем, добавляем, сохраняем и т.д.
var data = localStorage.tovar_list && JSON.parse(localStorage.tovar_list) || []; data.push({data : new Date().toString()}) localStorage.tovar_list = JSON.stringify(data); alert(JSON.stringify(data)) Все нормально? |
Цитата:
Ваще не понял что о чем |
Цитата:
localStorage хранит ни массивы, ни объекты, ни т.п., а строки. Ваш объект в нем будет хранится в виде json-строки, после преобразования JSON.stringify(), и localStorage.getItem("tovar_list");// Вытаскиваем массив это "вытащили" не массив, а строку, а чтобы она была массивом объектов, ее нужно преобразовать в таковой объект, и делает это JSON.parse(). Только после этого можно манипулировать массивом и объектами в нем. https://developer.mozilla.org/ru/doc...l_Objects/JSON |
Цитата:
var data = localStorage.tovar_list && JSON.parse(localStorage.tovar_list) || []; Он мне постоянно возвращает [] когда мне надо если есть в localStorage уже что то то дополнить если нет то создать |
Цитата:
localStorage.tovar_list - если в локальном хранилище есть свойство tovar_list && JSON.parse(localStorage.tovar_list) - и получаем объект || []; - иначе объявляем массив Это и есть выполнение "когда мне надо если есть в localStorage уже что то то дополнить если нет то создать". Хотя это условие можно описать и иначе. У вас проблемы не в этом, а в том, что вы работая со строкой, думаете, что это объект. Запустите несколько раз пример что я приводил, будет видно как в массив добавляется новые объекты. При этом json корректна. |
Часовой пояс GMT +3, время: 10:37. |
|