2012-12-04 21 views
15

Tablica obiektów JSON jest przechowywana w języku HTML5 localStorage.
Teraz ogranicznik jest ;
umożliwiającej dostęp do modyfikowania szereg przedmiotów z localStorage, split(';') i join(';') operacji stosowanych.tablica localStorage obiektów obsługujących

Jednak podejście ograniczające wygląda niestabilnie.
Na przykład ; może być spełniony wewnątrz obiektu atrybut i split(';') operacja będzie niepoprawna.

Może być używany jako ogranicznik, ale nie jestem pewien, czy będzie stabilny.

Czy istnieje jakiś niezawodny sposób obsługi localStorage prezentowany jako tablica obiektów, o ile został on zapisany pod numerem jako String?

EDIT

jednym z korkami jest to, że tablica obiektu nie można zapisać localStorage jako klasyczny: "[{},{}]"
localStorage konwertuje go automatially String jak "{},{}"

moje aktualne dane w ciągu localStorage:

"{"name":"volvo","id":"033"};{"name":"saab","id":"034"}" 

założenie
być może, mogę dodać [ na początku i ] na końcu, ale to nie wygląda gracefull

Odpowiedz

34

Wystarczy przekształcić obiekty do JSON strun:

localStorage.setItem("savedData", JSON.stringify(objects)); 

i odwrotnie:

objects = JSON.parse(localStorage.getItem("savedData"))); 

Lub możesz dodać wiele obiektów w tej samej wartości localStorage:

localStorage.setItem("savedData", JSON.stringify([object1, object2 /*, etc*/])); 
object1 = JSON.parse(localStorage.getItem("savedData"))[0]; 
object2 = JSON.parse(localStorage.getItem("savedData"))[1]; 

Here's the DOM storage specification.

Można również uzyskać dostęp savedData tak:

localStorage.savedData = "Hello world" 
var foo = localStorage.savedData; 

ten może być używany zarówno do pobierania i ustawiania danych, ale jest uważane za mniej „bezpieczne” niż getItem('name'); i setItem('name', 'value');

+0

Witam, testowałem tylko String w próżni, działa dobrze, jednak problem polega na tym, że tablica obiektów JSON została zapisana w 'localStorage' jako rozdzielona przez', 'nawiasy klamrowe, np. '" {obj1}, {obj2} "' i oczekuję '" [{obj1}, {obj2}] "' – sergionni

+0

Czy możesz edytować rzeczywisty obiekt/dane na swoje pytanie? Nie jestem do końca pewien, jak wyglądają dane, które próbujesz zapisać. Jestem zdezorientowany, ponieważ: 'JSON.stringify ([{a: 1}, {b: 2}]);' zwraca: '" [{"a": 1}, {"b": 2}] " ', jak się spodziewano. – Cerbrus

+0

właśnie dodano więcej informacji EDYTUJ sekcja, dzięki – sergionni

0

Czytaj zmienne:

var xyz = JSON.parse(localStorage.getItem('element'));

zmienne Store:

localStorage.setItem('element' , JSON.stringify(xyz));

gdzie element to nazwa zmiennej lokalnej pamięci masowej i xyz nazwa zmiennej js.

0

Możesz użyć parse i stringify, jeśli tablica nie jest zbyt duża, ale jeśli tak jest, to będziesz ponownie kodował cały zestaw danych dla każdej małej zmiany.

Biblioteka pod numerem http://rhaboo.org poprawia to, nadając każdemu wpisowi tablicy własny wpis LocalStorage na liście połączonej. Oznacza to, że możesz wprowadzać zmiany dość sprawnie. W przeciwieństwie do JSON, wyróżnia również właściwości tekstowe i trzy różne typy wpisów rzadkich (null, undefined i po prostu nie istnieje).

BTW, napisałem rhaboo.

Powiązane problemy