2015-12-28 22 views
7

Ho questo codice:Come archiviare e recuperare i dati JSON nella memoria locale?

var string = '{"items":[{"Desc":"Item1"},{"Desc":"Item2"}]}'; 
localStorage.setItem('added-items', JSON.stringify(string)); 

Questo codice userà localStorage.

Ecco ora il codice per ottenere i dati memorizzati:

var retrievedObject = localStorage.getItem('added-items'); 

Il mio problema ora è, come posso ottenere la dimensione degli elementi di dati? la risposta deve essere 2.

Come posso ottenere "Item1" e "Item2"?

Ho provato retrievedObject[0][0] ma non funziona.

E come aggiungere dati su di esso? quindi sarà

{"items":[{"Desc":"Item1"},{"Desc":"Item2"},{"Desc":"Item3"}]} 

Posso usare JSON.stringify?

+0

sembra necessario analizzare Doulbe – Grundy

risposta

7

stringify significa, prendere un object e restituire la sua presentazione come string. Quello che hai, è già una stringa e non un oggetto JSON.

L'opposto è JSON.parse che prende uno string e lo trasforma in object.

Nessuno di questi ha nulla a che fare con l'ottenimento della dimensione di un array. Quando si codifica JavaScript, non si utilizza quasi mai lo o JSON.stringify. Solo se la serializzazione è esplicitamente richiesta.

Usa length per la dimensione della matrice:

var obj = {"items":[{"Desc":"Item1"},{"Desc":"Item2"},{"Desc":"Item3"}]} 
console.debug(obj.items.length); 
+0

ottengo l'oggetto1 con questo oggetto objectems [0] .Desc. Ma come posso aggiungere {"Desc": "Item3"]}? – JMA

+1

'var foo = {" Desc ":" Item3 "}; items.push (foo); ' –

+1

Ma in questo caso desidera esplicitamente la serializzazione - per poterlo scrivere nella memoria locale. –

-1
var object = Json.parse(retrievedObject); 

Ora è possibile accedere solo come un array

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse

Se avete bisogno di più aiuto che ho qualche codice precedente dove sto leggendo JSON dalla memoria locale e facendo una forma da quella JSON . Tale codice vi aiuterà a capire come attraversare quella matrice

JSON memorizzato in localStorage

{"form":[{"element":"input", "type":"text","name":"name","value":"value","min":"2","max":"10"}]}

JavaScript per leggere che JSON

function readJson(){ 
 
    if(!form_created){ 
 
     add_form(); 
 
    } 
 
    var fetched_json = localStorage.getItem("json"); 
 
    var obj=JSON.parse(fetched_json); 
 
    for(var i=0; i<obj.form.length;i++){ 
 
     var input = document.createElement(obj.form[i].element); 
 
     input.name = obj.form[i].name; 
 
     input.value = obj.form[i].value; 
 
     input.type = obj.form[i].type; 
 
     input.dataset.min = obj.form[i].min; 
 
     input.dataset.max = obj.form[i].max; 
 
     input.dataset.optional = obj.form[i].optional; 
 
     
 
     form.insertBefore (input,form.lastChild); 
 
    } 
 
    alert(obj.form[0].name); 
 
}

+0

come posso accedervi? Ho provato l'oggetto [0] [0] [1] ma restituisce un indefinito – JMA

+0

Si prega di controllare la risposta aggiornata e fammi sapere se hai bisogno di aiuto –

+0

prova object.items [0] .Desc –

0

JSON.parse è sicuramente il modo migliore per creare un oggetto, ma voglio solo aggiungere, se questo non dovesse funzionare (a causa della mancanza di sostegno), obj = eval('(' + str + ')'); dovrebbe funzionare.Ho avuto un problema con un convertitore da HTML a PDF in passato che non includeva JSON.parse e eval ha fatto il trucco. Prova prima JSON.parse.

Accesso al tuo oggetto: obj.items[0].Desc;

+0

Questa risposta propone una soluzione sbagliata a qualcosa che non è nemmeno il problema. –

+0

Ho ripetuto che 'JSON.parse' è il modo migliore più di una volta e ha fornito un metodo aggiuntivo nel caso in cui fosse necessario. –

+0

In quale ambiente è 'JSON.parse' non supportato? –

4
// THIS IS ALREADY STRINGIFIED 
var string = '{"items":[{"Desc":"Item1"},{"Desc":"Item2"}]}'; 

// DO NOT STRINGIFY AGAIN WHEN WRITING TO LOCAL STORAGE 
localStorage.setItem('added-items', string); 

// READ STRING FROM LOCAL STORAGE 
var retrievedObject = localStorage.getItem('added-items'); 

// CONVERT STRING TO REGULAR JS OBJECT 
var parsedObject = JSON.parse(retrievedObject); 

// ACCESS DATA 
console.log(parsedObject.items[0].Desc); 
3

portare chiarezza alla gente futuri che potrebbero incappare in questo problema e trovato la risposta accettato di non essere tutto ciò che si sperava e sognato per:

ho ha esteso la domanda in modo che l'utente possa o desidera inserire uno string o JSON in localStorage.

Sono incluse due funzioni, AddToLocalStorage(data) e GetFromLocalStorage(key).

Con AddToLocalStorage(data), se l'input non è un string (come JSON), verrà convertito in uno.

GetFromLocalStorage(key) recupera i dati da localStorage di detto key

La fine dello script mostra un esempio di come esaminare e modificare i dati all'interno JSON. Poiché si tratta di una combinazione di oggetti e array, è necessario utilizzare una combinazione di . e [] dove applicabili.

var string = '{"items":[{"Desc":"Item1"},{"Desc":"Item2"}]}'; 
 
var json = {"items":[{"Desc":"Item1"},{"Desc":"Item2"},{"firstName":"John"},{"lastName":"Smith"}]}; 
 

 
localStorage.setItem('added-items', AddToLocalStorage(string)); 
 
localStorage.setItem('added-items', AddToLocalStorage(json)); 
 

 
// this function converts JSON into string to be entered into localStorage 
 
function AddToLocalStorage(data) { 
 
    if (typeof data != "string") {data = JSON.stringify(data);} 
 
    return data; 
 
} 
 

 
// this function gets string from localStorage and converts it into JSON 
 
function GetFromLocalStorage(key) { 
 
    return JSON.parse(localStorage.getItem(key)); 
 
} 
 

 
var myData = GetFromLocalStorage("added-items"); 
 

 
console.log(myData.items[2].firstName) // "John" 
 

 
myData.items[2].firstName = ["John","Elizabeth"]; 
 
myData.items[2].lastName = ["Smith","Howard"]; 
 

 
console.log(myData.items[2]) // {"firstName":["John","Elizabeth"],"lastName":["Smith","Howard"]} 
 

 
console.log(myData.items.length) // 4

Problemi correlati