2015-12-28 2 views
7

Ich habe diesen Code:Wie können JSON-Daten im lokalen Speicher gespeichert und abgerufen werden?

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

Dieser Code wird localstorage verwenden.

Hier ist nun der Code die gespeicherten Daten zu erhalten:

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

Mein Problem ist jetzt, wie kann ich die Größe der Datenelemente erhalten? Antwort muss 2 sein.

Wie kann ich die "Item1" und "Item2" bekommen?

Ich versuchte retrievedObject[0][0], aber es funktioniert nicht.

Und wie füge ich Daten hinzu? so wird es

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

Kann ich JSON.stringify benutzen?

+0

scheint Sie doulbe müssen – Grundy

Antwort

7

stringify bedeutet, nehmen Sie eine object und geben Sie ihre Präsentation als string. Was Sie haben, ist bereits eine Zeichenfolge und kein JSON-Objekt.

Das Gegenteil ist JSON.parse, die eine string nimmt und verwandelt es in eine object.

Keine von beiden hat etwas mit der Größe eines Arrays zu tun. Wenn Sie JavaScript richtig programmieren, verwenden Sie fast nie JSON.parse oder JSON.stringify. Nur wenn Serialisierung explizit gewünscht ist.

Verwenden length für die Größe des Arrays:

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

ich bekomme das Item1 mit diesem, object.items [0] .Desc. Aber wie kann ich {"Desc": "Item3"}} hinzufügen? – JMA

+1

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

+1

Aber er möchte in diesem Fall explizit Serialisierung - um es in lokalen Speicher zu schreiben. –

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

Jetzt können Sie darauf zugreifen wie ein Array

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

Wenn Sie weitere Hilfe benötigen ich einige vorherigen Code haben, wo ich Json aus dem lokalen Speicher lese und machen eine Form von diesem json . Dieser Code wird dazu beitragen, das Verständnis, wie das Array in localstorage

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

JavaScript

Json gespeichert zu durchqueren, dass json zu lesen

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

analysieren, wie kann ich darauf zugreifen? Ich habe versucht, Objekt [0] [0] [1], aber es gibt undefined – JMA

+0

Bitte überprüfen Sie die aktualisierte Antwort und lassen Sie mich wissen, wenn Sie Hilfe benötigen –

+0

versuchen object.items [0] .Desc –

0

JSON.parse ist definitiv der beste Weg, um ein Objekt zu erstellen, aber ich möchte nur hinzufügen, wenn das nicht (wegen der fehlenden Unterstützung) nicht funktioniert, obj = eval('(' + str + ')'); sollte funktionieren.Ich hatte ein Problem mit einem HTML-zu-PDF-Konverter in der Vergangenheit, die nicht JSON.parse und eval tat den Trick. Versuchen Sie zuerst JSON.parse.

Zugriff auf Ihre Aufgabe: obj.items[0].Desc;

+0

Diese Antwort schlägt eine schlechte Lösung für etwas vor, das nicht einmal das Problem ist. –

+0

Ich wiederholte, dass 'JSON.parse' ist der beste Weg mehr als einmal und gab eine zusätzliche Methode für den Fall, dass es benötigt wurde. –

+0

In welcher Umgebung wird 'JSON.parse' nicht unterstützt? –

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

Um Klarheit zu zukünftigen Menschen zu bringen, die sich über diese Frage stolpern und finden die akzeptierte Antwort auf nicht alles, was man gehofft und geträumt:

Ich habe Die Frage wurde erweitert, so dass der Benutzer entweder string oder JSON in localStorage eingeben möchte.

Enthalten sind zwei Funktionen, AddToLocalStorage(data) und GetFromLocalStorage(key).

Mit AddToLocalStorage(data), wenn Ihre Eingabe kein string (wie JSON) ist, wird es in eins konvertiert.

GetFromLocalStorage(key) ruft die Daten aus localStorage der key

Das Ende des Skripts zeigt ein Beispiel, wie die Daten innerhalb JSON zu prüfen und zu ändern. Da es sich um eine Kombination aus Objekten und Array handelt, muss eine Kombination von . und [] verwendet werden, wenn sie anwendbar sind.

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