2012-12-04 12 views
15

La matrice di oggetti JSON è memorizzata in HTML5 localStorage.
Per ora delimitatore è ;
per accedere e modificare matrice di oggetti da localStorage, split(';') e join(';') operazioni utilizzate.array locale di gestione degli oggetti

Tuttavia, l'approccio del delimitatore sembra instabile.
Per esempio ; potrebbero essere soddisfatti all'interno degli attributi degli oggetti e l'operazione split(';') non sarà corretta.

Potrebbe essere utilizzato ;; per delimitatore, ma non sono sicuro che sarà stabile anche.

Esiste un modo efficace per gestire localStorage presentato come una matrice di oggetti, fino asalvato come String?

EDIT

uno dei tappi è tale matrice di oggetto non può essere salvato come localStorage classica: "[{},{}]"
localStorage lo converte in stringa automatially come "{},{}"

miei dati attuali entro localStorage:

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

presupposto
forse, posso aggiungere [ all'inizio e ] alla fine, ma non sembra gracefull

risposta

34

solo convertire gli oggetti in stringhe JSON:

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

e viceversa:

Oppure è possibile aggiungere più oggetti nello stesso valore di 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.

È anche possibile accedere savedData in questo modo:

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

Questo può essere utilizzato sia per ottenere e impostare i dati, ma è considerato meno "sicuro" rispetto getItem('name'); e setItem('name', 'value');

+0

ciao, ho provato solo con String nel vuoto, funziona OK, tuttavia il problema è che la matrice di oggetti JSON salvati in 'localStorage' come delimitata da', 'parentesi graffe, ad es. '" {obj1}, {obj2} "' e mi aspetto '" [{obj1}, {obj2}] "' – sergionni

+0

Puoi modificare l'oggetto/i dati reali nella tua domanda? Non sono abbastanza sicuro di come i dati che stai cercando di salvare guardino, ora. Sono confuso perché: 'JSON.stringify ([{a: 1}, {b: 2}]);' restituisce: '" [{"a": 1}, {"b": 2}] " ', come previsto. – Cerbrus

+0

appena aggiunto ulteriori informazioni nella sezione EDIT, grazie – sergionni

0

leggere le variabili:

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

variabili Store:

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

dove element è il nome della variabile di archiviazione locale e xyz il nome della variabile js.

0

È possibile utilizzare parse e stringify se l'array non è troppo grande, ma se lo è, quindi verrà ricodificare l'intero set di dati per ogni piccola modifica.

La libreria su http://rhaboo.org migliora il risultato assegnando a ciascuna voce di array la propria voce localStorage in un elenco collegato. Ciò significa che puoi apportare modifiche in modo abbastanza efficiente. A differenza di JSON, onora anche le proprietà di testo e tre diversi tipi di voci sparse (null, indefinite e semplicemente non presenti)

BTW, ho scritto rhaboo.