JavaScript локального хранилища: как я могу разделить 1 JSON, содержащий 2 объекта, на 2 JSON (по 1 на объект?) - PullRequest
0 голосов
/ 06 ноября 2019

Я храню корзину пользователя в localStorage (он может иметь более одного элемента):

 let data = [];
 for (i = 0; i < rows.length - 1; i++) {
    let info = {
      "price": price,
      "quantity": quantity,
      "priceTotal": priceTotal
    };
    data.push(JSON.stringify(info));
  }
  localStorage.setItem("reservations", data);
}

если у пользователя есть два элемента, мой json выглядит следующим образом:

{"price":"10 €", "quantity":"1", "priceTotal":"10 €"},{"price":"20 €", "quantity":"2", "priceTotal":"40 €"}

Я печатаю его в журнале консоли с:

let info = localStorage.getItem("reservations");
console.log(info);

Как я понимаю, это печатается как строка. Я пытаюсь сделать это объектом, чтобы использовать данные где-то еще с myObject[propertyName], но когда я пытаюсь PARSE с getItem():

  let myObject = JSON.parse(window.localStorage.getItem('reservations'));

, я получаю ошибку:

VM8224: 1 Uncaught SyntaxError: Неожиданный токен в JSON в позиции 123 в JSON.parse ()

Это связано с тем, что в моем Json есть 2 объекта? Как я могу разделить объекты?

Я сделал jsfiddle: https://jsfiddle.net/Demky/4ea1s3rn/28/ (вам нужно открыть консоль, чтобы увидеть результат)

  • сохранить данные

  • read dada

  • сбой при попытке json.parse

    VM516: 1 Uncaught SyntaxError: неожиданный токен,в JSON в позиции 51 в JSON.parse`

дайте мне знать, если я смогу прояснить свой вопрос.

Ответы [ 3 ]

2 голосов
/ 06 ноября 2019

Когда вы храните массив в локальном хранилище, вам нужно сначала записать в строку эти данные, а затем сохранить. Вот так.

localStorage.setItem("reservations", JSON.stringify(data));
1 голос
/ 06 ноября 2019

Вы должны структурировать весь массив вместо каждого элемента массива, сохраняя его в локальном хранилище.

 let data = [];
 for (i = 0; i < rows.length - 1; i++) {
    let info = {
      "price": price,
      "quantity": quantity,
      "priceTotal": priceTotal
    };
    data.push(info);
  }
  localStorage.setItem("reservations", JSON.stringify(data));
}

Вот обновленная скрипка

1 голос
/ 06 ноября 2019
 let data = [];
 for (i = 0; i < rows.length - 1; i++) {
    let info = {
      "price": price,
      "quantity": quantity,
      "priceTotal": priceTotal
    };
    data.push(info);
  }
  localStorage.setItem("reservations", JSON.stringify(data));
}

let myObject = JSON.parse(window.localStorage.getItem('reservations'));

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...