|
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, время: 14:15. |
|