連載
» 2012年12月10日 18時00分 UPDATE

PlayNでクロスプラットフォームのゲーム開発(4):PlayNアプリでJSON作成やネット接続をするには (1/2)

本連載「PlayNでクロスプラットフォームのゲーム開発」では、Javaで書いたアプリをiOS、Android、HTML5、Flashなどにクロスコンパイルできるライブラリの概要や基本的な使い方を解説していきます。

[中田亮平, 高良完彰,リトルソフト]

 グーグルが開発しているクロスプラットフォームゲームライブラリであるPlayNを紹介している本連載。第3回目の前回「PlayNアプリでオーディオ再生、ストレージデータ保存」では、PlayNでのオーディオ再生、データ保存を紹介しました。

 第4回目である今回はPlayNでのJSONデータの作成、インターネットへのアクセスを紹介します。

PlayNでJSONデータを扱う「Json」インターフェイス

 PlayNはJSONのインターフェイスも提供しており、データのやりとりにJSON形式のデータを利用できます。JSONインターフェイスはPlayNクラスのjsonメソッドで取得できます。

Json json = PlayN.json();

 このインターフェイスは「JSON Array」「JSON Object」の2通りの形式に対応しており、どちらの形式のデータを作成する場合もJson.Writerインターフェイスを利用してデータを作成します。

 Json.Writerインターフェイスは下記の方法で取得できます。

Json.Writer writer = PlayN.json().newWriter();

 JSON ArrayもJSON Objectも、データの値にはNumber、String、Boolean、Object型のものを入力できますが、JSON Objectのキーとなる値にはStringを入力する必要があります。

JSON Array形式のデータを作成

 下記はJSON Array形式のデータを作成する例です。

writer.array();
writer.value(123);
writer.value("json array value");
writer.value(true);
writer.end();

 最初のarrayメソッドでJSON Array形式のデータを作成することを指定し、最後のendメソッドでデータ作成を終了することを示しています。そして、これらの間に呼ばれるvalueメソッドによってデータを入力します。このようにして作成されたデータは、下記のようにwriteメソッドを使い、JSON形式のデータをStringの値として取得できます。

String s = writer.write();

 上記の例で作成したJSONをwriteメソッドでStringに変換すると、以下の値が取得できます。

[123,"json array value",true]

JSON Object形式のデータを作成

 また、下記はJSON Object形式のデータを作成する例です。

writer.object();
writer.value("key1", 123);
writer.value("key2", "json object value");
writer.value("key3", true);
writer.end();

 こちらは最初のobjectメソッドでJSON Object形式のデータを作成することを指定し、最後のendメソッドでデータ作成の終了を示しています。また、こちらのvalueメソッドではキーと値のセットを渡し、データを作成します。

 このように作成されたJSONをwriteメソッドでStringに変換すると、以下の値が取得できます。

{"key1":123,"key2":"json object value","key3":true}

JSON文字列からJSONのオブジェクトを作成

 また、これらの方法とは逆に、JSONインターフェイスのparseメソッドを使用することで、すでに、JSON形式になっている文字列からJSONのオブジェクトも作成できます。

JSON文字列からJson.Array形式のオブジェクトを作成

 例えば、先ほどの以下の値が「str」というStringの変数に設定されていた場合があるとします。

[123,"json array value",true]

 この場合は、以下のようにすることで、この文字列のデータをJson.Array形式で作成できます。

Json.Array jsonArr = json().parseArray(str);

 それぞれの値は以下のようにインデックスの値を渡すことで取得できます。

jsonArr.getInt(0);
jsonArr.getString(1);
jsonArr.getBoolean(2);

 それぞれの値の形式を知りたい場合は、以下のようにしてbooleanの値を取得できます。

jsonArr.isNumber(0);
jsonArr.isString(1);
jsonArr.isBoolean(2);

 その他にも以下のようにすると、【1】データの追加、【2】変更(第1引数はインデックス番号)、【3】削除(引数はインデックス番号)を行えます。

jsonArr.add("new value"); // 【1】
jsonArr.set(0, "modified value"); // 【2】
jsonArr.remove(0); // 【3】

JSON文字列からJson.Object形式のオブジェクトを作成

 また、同様に以下のような値がStringの「str」に設定されていたとします。

{"key1":123,"key2":"json object value","key3":true}

 この場合、以下のようにすることでJson.Object形式のオブジェクトを作成できます。

Json.Object jsonObj = json().parse(str);

 こちらで値を取得する場合は、以下のようにキーの値を引数で渡します。

jsonObj.getInt("key1");
jsonObj.getString("key2");
jsonObj.getBoolean("key3");

 また、Array形式の場合と同様に以下のようにすると、それぞれの値の型を調べられます。

jsonObj.isNumber("key1");
jsonObj.isString("key2");
jsonObj.isBoolean("key3");

 JSON.Objectでのデータの追加/変更は、以下のようにすると、可能です。

jsonObj.put("key4", "value 4");

 以下のようにしてデータを削除できます。

jsonObj.remove("key4");

 以下のようにすると、キーの一覧(型はJson.TypedArray<String>)を取得できます。

jsonObj.keys();

PlayNでインターネットへアクセスする「Net」インターフェイス

 PlayNで作成したゲームはインターネットへアクセスし、データを送受信できます。送受信にはHTTPのGET、POSTメソッドによる方法とWebSocketを利用する方法があります。ここではHTTPのGET、POSTメソッドを使ってインターネットへアクセスする方法を紹介します。

 まずインターネットへアクセスするためにはPlayNのNetインターフェイスを利用する必要があり、他のインターフェイスと同様、下記の方法でNetインターフェイスを取得できます。

Net net = PlayN.net();

 このNetインターフェイスにはgetメソッドとpostメソッドがあり、それぞれHTTPのGETメソッドとPOSTメソッドへ対応しています。

void  get(String url, Callback<String> callback)
void  post(String url, String data, Callback<String> callback)

 それぞれ第1引数ではアクセスするURLを指定します。postメソッドの第2引数では送信するデータを渡し、getメソッドの第2引数とpostメソッドの第3引数ではレスポンスを受け取った時に呼ばれるコールバックを設定します。

       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。