Задать вопрос
PankovAlxndr
@PankovAlxndr
Fullstack web developer

Как реализовать хранение JSON объекта внутри JSON?

Здравствуйте.
Такое дело, реализую корзину товаров на стороне клиента, использую localStorage
Соответственно храню
{артикул : количествоШтук}

Все это дело в localStorage['christGoods'] = тут ассоциативный массив должен быть...

Так вот в чем проблема, когда корзина пустая (нет ключа christGoods в localStorage), все оу, начинаю добавлять какой-то товар... НО как только я щелкая на добавление какого-то иного товара (с другим артикулом) я получаю ошибку..

Вот консоль пример:
Storage {christGoods: "{"007":1}", length: 1}
Storage {christGoods: "{"007":2}", length: 1}
Storage {christGoods: "{"007":3}", length: 1}
Storage {christGoods: "{"007":3}{"006":1}", length: 1}
Uncaught SyntaxError: Unexpected token {

Я понимаю что криво записываю JSON надо стремится вот так:
{
  "christGoods": {
    "001": "4",
    "005": "9"
  }
}

у меня лишние {}

Вот собственно и вопрос: Как организовать хранение в localStorage?
По клику добавляется(обновляется количество) в localStorage['christGood']

само же значение localStorage['christGood'] = должно иметь такой вид
{
    "001": "4",
    "005": "9"
  }


А у меня такой выходит тк функция JSON.stringify преобразуя новый объект(клик по кнопке создает объект(ассоциативный массив) с артикулом количеством) в формат JSON кавычки ставит всегда(а не надо бы..
у меня
christGoods: "{"007":3}{"006":1}"
надоchristGoods:{"007": "3","006": "1"}
Заранее благодарен за помощь!
  • Вопрос задан
  • 3878 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 5
Вы не правильно превращаете json в строку, или что-то около того.

Попробуйте вот это:
function addToCart(id, count) {
    var cart = localStorage.getItem('christGoods');
    cart = JSON.parse(cart) || {};
    cart[id] = cart[id] || 0;
    cart[id] += count;
    localStorage.setItem('christGoods', JSON.stringify(cart));
}

function getCart() {
    var cart = localStorage.getItem('christGoods');
    cart = JSON.parse(cart) || {};
    return cart;
}


Использовать так:
addToCart('001', 2);
getCart();
// Object {001: 2}


Это всего-лишь возможный пример реализации, но это работает :-)
Ответ написан
@alokazay
javascript
Json - должно быть все в двойных кавычках.
Ответ написан
@bromzh
Drugs-driven development
Кавычки экранируй
{
    "foo": "{\"inner\": [1, true, \"val\"]}",
    "bar": 2
}
Ответ написан
Комментировать
SagePtr
@SagePtr
Еда - это святое
localStorage может только строки содержать, потому перед помещением в него объект нужно сериализовать. Например, функцией JSON.stringify
Ответ написан
PankovAlxndr
@PankovAlxndr Автор вопроса
Fullstack web developer
...//получение(расчет) articul и count
new_goods[articul] = 1;
...
localStorage['christGoods'] = JSON.stringify(new_goods);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы