Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.07.2017, 10:48
Кандидат Javascript-наук
Отправить личное сообщение для biryukovm Посмотреть профиль Найти все сообщения от biryukovm
 
Регистрация: 13.12.2013
Сообщений: 110

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 и было удобно долять элементы что можете подсказать, я не гуру но понимаю код и как всегда мы учимся чемуто новому
Ответить с цитированием
  #2 (permalink)  
Старый 03.07.2017, 11:01
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от biryukovm
localStorage.getItem("tovar_list ");// Вытаскиваем массив
var data = JSON.parse(localStorage.getItem("tovar_list "));// Вытаскиваем массив
Ответить с цитированием
  #3 (permalink)  
Старый 03.07.2017, 11:05
Кандидат Javascript-наук
Отправить личное сообщение для biryukovm Посмотреть профиль Найти все сообщения от biryukovm
 
Регистрация: 13.12.2013
Сообщений: 110

Сообщение от laimas Посмотреть сообщение
var data = JSON.parse(localStorage.getItem("tovar_list "));// Вытаскиваем массив
Этого проблема у меня нету в коде "tovar_list " видемо когда добовлял опечатка
Ответить с цитированием
  #4 (permalink)  
Старый 03.07.2017, 11:11
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

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

Ну а что дальше будет бардак, пояснять не надо.
Ответить с цитированием
  #5 (permalink)  
Старый 03.07.2017, 11:43
Кандидат Javascript-наук
Отправить личное сообщение для biryukovm Посмотреть профиль Найти все сообщения от biryukovm
 
Регистрация: 13.12.2013
Сообщений: 110

Я переделал немного код на
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 я уже запутался
Ответить с цитированием
  #6 (permalink)  
Старый 03.07.2017, 11:56
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

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


Все нормально?
Ответить с цитированием
  #7 (permalink)  
Старый 03.07.2017, 12:17
Кандидат Javascript-наук
Отправить личное сообщение для biryukovm Посмотреть профиль Найти все сообщения от biryukovm
 
Регистрация: 13.12.2013
Сообщений: 110

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

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


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

Ваще не понял что о чем
Ответить с цитированием
  #8 (permalink)  
Старый 03.07.2017, 12:23
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

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

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

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

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

https://developer.mozilla.org/ru/doc...l_Objects/JSON
Ответить с цитированием
  #9 (permalink)  
Старый 03.07.2017, 12:40
Кандидат Javascript-наук
Отправить личное сообщение для biryukovm Посмотреть профиль Найти все сообщения от biryukovm
 
Регистрация: 13.12.2013
Сообщений: 110

Сообщение от laimas Посмотреть сообщение
Сожалею.

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 уже что то то дополнить если нет то создать
Ответить с цитированием
  #10 (permalink)  
Старый 03.07.2017, 12:46
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

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

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

Последний раз редактировалось laimas, 03.07.2017 в 12:49.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод JSON Объекта из localStorage Философ Общие вопросы Javascript 36 12.09.2015 11:32
Удаление / добавление JSON Alexander Belov Events/DOM/Window 16 01.05.2015 23:51
Не могу распарсить JSON. gorenie jQuery 3 29.11.2013 22:26
JSON или JSONP для запросов на другой сервер? Метод GET, для длинных сообщений? Kotakota jQuery 5 23.08.2011 23:12
jQuery. Обработка ошибок и JSON. mma_mma jQuery 3 19.07.2010 12:10