Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   JSON localStorage (https://javascript.ru/forum/events/69557-json-localstorage.html)

biryukovm 03.07.2017 10:48

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 и было удобно долять элементы что можете подсказать, я не гуру но понимаю код и как всегда мы учимся чемуто новому

laimas 03.07.2017 11:01

Цитата:

Сообщение от biryukovm
localStorage.getItem("tovar_list ");// Вытаскиваем массив

var data = JSON.parse(localStorage.getItem("tovar_list "));// Вытаскиваем массив

biryukovm 03.07.2017 11:05

Цитата:

Сообщение от laimas (Сообщение 457308)
var data = JSON.parse(localStorage.getItem("tovar_list "));// Вытаскиваем массив

Этого проблема у меня нету в коде "tovar_list " видемо когда добовлял опечатка

laimas 03.07.2017 11:11

Цитата:

Сообщение от biryukovm
Этого проблема у меня нету в коде

Не знаю, если у вас проблема, нет, но

var data = {}; - объявлена переменная как объект, которая затем заменяется строкой
data = localStorage.getItem("tovar_list ");

Ну а что дальше будет бардак, пояснять не надо.

biryukovm 03.07.2017 11:43

Я переделал немного код на
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 я уже запутался

laimas 03.07.2017 11:56

У вас массив объектов, следовательно по умолчанию должен быть массив. Вот так: есть сохраненный, значит получаем, добавляем, сохраняем и т.д.

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


Все нормально?

biryukovm 03.07.2017 12:17

Цитата:

Сообщение от laimas (Сообщение 457322)
У вас массив объектов, следовательно по умолчанию должен быть массив. Вот так: есть сохраненный, значит получаем, добавляем, сохраняем и т.д.

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


Все нормально?


Ваще не понял что о чем

laimas 03.07.2017 12:23

Цитата:

Сообщение от biryukovm
Ваще не понял что о чем

Сожалею.

localStorage хранит ни массивы, ни объекты, ни т.п., а строки. Ваш объект в нем будет хранится в виде json-строки, после преобразования JSON.stringify(), и

localStorage.getItem("tovar_list");// Вытаскиваем массив

это "вытащили" не массив, а строку, а чтобы она была массивом объектов, ее нужно преобразовать в таковой объект, и делает это JSON.parse().

Только после этого можно манипулировать массивом и объектами в нем.

https://developer.mozilla.org/ru/doc...l_Objects/JSON

biryukovm 03.07.2017 12:40

Цитата:

Сообщение от laimas (Сообщение 457327)
Сожалею.

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 уже что то то дополнить если нет то создать

laimas 03.07.2017 12:46

Цитата:

Сообщение от biryukovm
Тогда я не понимаю этого

var data =
localStorage.tovar_list - если в локальном хранилище есть свойство tovar_list
&& JSON.parse(localStorage.tovar_list) - и получаем объект
|| []; - иначе объявляем массив

Это и есть выполнение "когда мне надо если есть в localStorage уже что то то дополнить если нет то создать". Хотя это условие можно описать и иначе. У вас проблемы не в этом, а в том, что вы работая со строкой, думаете, что это объект.

Запустите несколько раз пример что я приводил, будет видно как в массив добавляется новые объекты. При этом json корректна.


Часовой пояс GMT +3, время: 03:07.