Video: JavaScript for Web Apps, by Tomas Reimers and Mike Rizzo 2025
JavaScript-Objektnotation (JSON) ist der De-facto-Standard für die Darstellung von Daten in iOS-Apps. Mit JSON können Sie Daten über das Internet übertragen und als Format für das Speichern und Abrufen langlebiger Daten verwenden. JSON ist sowohl für den Menschen lesbar als auch für Maschinen leicht verständlich. Daten in JSON können sich in einer von zwei Strukturen befinden: Ein Objekt, das einen nicht geordneten Satz von Name-Wert-Paaren enthält. Jeder Name-Wert entspricht einem Attribut des Objekts. Jedes Name-Wert-Paar kann verschachtelt sein, falls das darzustellende Attribut hierarchisch aufgebaut ist.
-
-
In Tic-Tac-Toe repräsentiert JSON den Zustand eines Spiels. Dieser Status besteht aus folgendem:
Der aktuelle Spieler (Spieler 1 oder Spieler 2) wird als Ganzzahl dargestellt (0 für Spieler 1 und 1 für Spieler 2).
-
Der Status des Spiels - ob es aktiv oder vollständig ist; wenn es abgeschlossen ist, ob es gewonnen oder gezogen wurde; und wenn gewonnen, von wem.
-
Der Zustand des Gitters - dh welche Symbole sind in jedem der Quadrate auf dem Gitter vorhanden. Beachten Sie, dass die Symbole als die ganzzahligen Werte 0, 1 und 2 dargestellt werden, die für Leerzeichen, X bzw. O stehen.
-
Das aktuelle Symbol (das Symbol, das beim nächsten Zug gespielt wird). Hier (und um das Beispiel nur zu variieren) stellen wir das Symbol als die Zeichenfolge "X" oder die Zeichenfolge "O" oder ein Leerzeichen ("") dar.
-
-
In diesem Code zeigen wir das JSON-Objekt, das einem aktiven Tic-Tac-Toe-Spiel entspricht:
{"TTTGameKeyCurrentPlayer": 0, "TTTGameKeyState": 0, "TTTGameKeyGridState": "2, 1, 2, 2, 1, 0, 1, 2, 1 "," TTTGameKeyCurrentSymbol ":" X "," TTTGameKeyPlaycount ": 8}
JSON bildet die verfügbaren Datenstrukturen (z. B. Array, Strukturen und Objekte) in so ziemlich jede Programmiersprache. Die Objektform von JSON kann leicht auf Objekte oder Strukturen der Programmiersprache abgebildet werden, wohingegen die Array-Form von JSON einem Array, Vektor, einer Liste oder einer Sequenz zugeordnet werden kann, im Grunde genommen kann jede Datenstruktur eine geordnete Sammlung von Objekten enthalten.
In Tic-Tac-Toe wird das JSON-Objekt, das dem Status des Spiels entspricht, einem NSDictionary zugeordnet, da ein NSDictionary-Objekt auch aus verschachtelten Namenswertepaaren besteht.Wenn Sie den Status des Spiels speichern müssen, erhalten Sie daher seinen Status als NSDictionary-Objekt und konvertieren es dann in eine JSON-Zeichenfolge.
Wenn Sie den Status des Spiels abrufen, tun Sie das Gegenteil - Sie lesen JSON-Daten ein, konvertieren es in ein NSDictionary-Objekt und verwenden dann das NSDictionary, um das Spiel in den gespeicherten Zustand zurückzusetzen.
Das folgende Beispiel zeigt diese Konvertierung von einem Dictionary-Objekt in JSON und vom JSON-Datenobjekt in eine Zeichenfolge (von der Methode saveGame im Game Session-Ansichtscontroller - Dateien TTTGameSessionViewController. M und. H):
- (IBAction) saveGame: (id) Absender {NSDictionary * savedGameDictionary = [activeGame toDictionary]; NSError * Fehler; NSData * jsonData = [NSJSONSerialization dataWithJSONObject: savedGameDictionary-Optionen: NSJSONWritingPrettyPrinted error: & error]; NSString * savedGameString = [[NSString-Zuweisung] initWithData: jsonData-Kodierung: NSUTF8StringEncoding]; NSString * savedGamesFilePath = [NSHomeDirectory () stringByAppendingPathComponent: @TTTGAMESESSIONSAVEDFILEPATH]; [savedGameString writeToFile: savedGamesFilePath atomar: YES encoding: NSUTF8StringEncoding error: NULL];}
Die wichtige Methode ist hier die Methode dataWithJSONObject aus der NSJSONSerialization-Klasse.
Sie können die umgekehrte Operation (dh von einem JSON-String zu einem NSDictionary) in der restoreGame-Methode im selben View-Controller sehen:
- (IBAction) restoreGame: (id) sender {NSLog (@ "Restoring Spiel"); … NSError * restoreError = Null; NSMutableDictionary * savedDictionary = [NSJSONSerialization JSONObjectWithData: [savedGameString dataUsingEncoding: NSUTF8StringEncoding] Optionen: NSJSONReadingMutableContainers Fehler: & restoreError]; activeGame = [[TTTGame-Zuordnung] initFromDictionary: savedDictionary]; TTTGameGrid * gameGrid = [activeGame getGameGrid]; if (! [activeGame isActive]) [boardView disableInput]; [boardView setGrid: gameGrid]; [gameView redraw];}
Die Schlüsselmethode ist hier JSONObjectWithData, die den umgekehrten Vorgang der Erstellung des Objective-C NSDictionary aus JSON-Daten ausführt.
