ビデオ: 0(ゼロ)から始めるJavaScriptによるWebアプリ開発入門 #03-2 pacage.jsonとは? 2024
JavaScript Object Notation(JSON)は、iOSアプリケーションのデータを表現する上での事実上の 標準になっています。 JSONを使用して、Web上でデータを転送したり、長期保存データを保存および取得するためのフォーマットとして使用することができます。 JSONは、人間が読める形式であり、マシンが理解しやすい形式です。 JSONのデータは、次の2つの構造のいずれかになります。 名前と値のペアの順序付けられていないセットを含むオブジェクト。各name-valueは、オブジェクトの属性に対応します。表現されている属性が本質的に階層的である場合には、それぞれの名前と値のペアを入れ子にすることができます。
-
<! - 1 - >
順序付けられた値の配列。配列内の各値は、スカラ(ブール値、文字列、または数値)、オブジェクト、または配列です。 -
Tic-Tac-Toeでは、JSONはゲームの状態を表します。この状態は以下からなる:
現在のプレーヤ(プレイヤ1またはプレイヤ2)は整数(プレーヤ1は0、プレーヤ2は1)で表される。
-
ゲームの状態 - アクティブであるか完全であるかにかかわらず。それが完了した場合、それが勝っているか描かれているか、誰が勝ったのかを知ることができます。
-
<! - 2 - >
状態は、整数としても表され、Inactiveは-1、Activeは0、Wonは1、Drawは2です。グリッドの状態 - つまり、どのシンボルグリッド上の各正方形に存在する。記号は、それぞれBlank、X、およびOを表す0,1,2の整数値で表されることに注意してください。
-
現在のシンボル(次の移動で再生されるシンボル)。ここでは(そして例を変えるために)、シンボルを文字列 "X"または文字列 "O"または空白( "")として表します。
-
<! - 3 - >
プレイカウント(ゲームの現在のポイントに加えられた移動回数)は整数で表されます。 -
{"TTTGameKeyCurrentPlayer":0、 "TTTGameKeyState":0、 "TTTGameKeyGridState": "2,1,2}このコードでは、アクティブなTic-Tac-Toeゲームに対応するJSONオブジェクトを示します。 JSONは、使用可能なデータ構造(配列、構造体、オブジェクトなど)に簡単にマッピングされます。たとえば、次のようになります。ほとんどすべてのプログラミング言語。 JSONのオブジェクト形式はプログラミング言語のオブジェクトや構造に簡単にマッピングできますが、JSONの配列形式は配列、ベクトル、リスト、シーケンスにマップできます。 Tic-Tac-Toeでは、ゲームの状態に対応するJSONオブジェクトがNSDictionaryにマップされます。これは、NSDictionaryオブジェクトもネストされた名前値のペアで構成されるためです。その結果、ゲームの状態を保存する必要があるときは、その状態をNSDictionaryオブジェクトとして取得し、それをJSON文字列に変換します。
ゲームの状態を取得するときは、逆の処理を行います.JSONデータを読み込んでNSDictionaryオブジェクトに変換し、NSDictionaryを使用してゲームを保存した状態に復元します。
次の例は、辞書セッションオブジェクトからJSONオブジェクトへの変換と、JSONデータオブジェクトから文字列への変換を示しています(GameセッションビューコントローラのファイルsaveTemplate.mおよび.h)。
- ( IBAction)saveGame:(id)sender {NSDictionary * savedGameDictionary = [activeGame toDictionary]; NSError *エラー。 NSData * jsonData = [NSJSONSerialization dataWithJSONObject:savedGameDictionaryオプション:NSJSONWritingPrettyPrintedエラー:&エラー]; NSString * savedGameString = [[NSString alloc] initWithData:jsonDataエンコーディング:NSUTF8StringEncoding]; NSString * savedGamesFilePath = [NSHomeDirectory()stringByAppendingPathComponent:@TTTGAMESESSIONSAVEDFILEPATH]; NSJSONSerializationクラスのメソッドdataWithJSONObjectには、重要なメソッドがあります。NSJSONSerializationクラスのメソッドdataWithJSONObjectには、[savedGameString writeToFile:savedGamesFilePath atomically:YES encoding:NSUTF8StringEncoding error:NULL];}
同じビューコントローラー内のrestoreGameメソッドの逆の操作(つまり、JSON文字列からNSDictionary)を見ることができます:
- (IBAction)restoreGame:(id)sender {NSLogゲーム"); … NSError * restoreError = nil; NSMutableDictionary * savedDictionary = [NSJSONSerialization JSONObjectWithData:[savedGameString dataUsingEncoding:NSUTF8StringEncoding]オプション:NSJSONReadingMutableContainersエラー:&restoreError]; activeGame = [[TTTGame alloc] initFromDictionary:savedDictionary]; TTTGameGrid * gameGrid = [アクティブゲームgetGameGrid]; if(![activeGame isActive])[boardView disableInput]; [ボードビューsetGrid:gameGrid]; [gameView redraw];}
ここで重要なメソッドは、JSONデータからObjective-C NSDictionaryを作成する逆の操作を行うJSONObjectWithDataです。