UnityでJSONをあつかう - JSONObject
About
通信して連携するようなアプリケーション、ゲームを作る場合に、JSON形式でデータをやり取りすることは良くあります。ここでは既存のpackage・アセットリソースを利用してJSONを取り扱う方法についてまとめます。
この記事を書く段階では取りあえずJSONテキストのパースとそこからのデータの受け取りだけできればよかったので、JSONテキストの生成については言及されていません。
- Unity_JSONObjectTest.zip
- Unity4.0プロジェクト
- LGPL ver 2.1で配布されます。無保証かつ責任の一切を追わないことをここに明記します。
- 原文が配布ファイルの中に含まれます。
扱うプラグイン・アセット
ここでは"JSONObject"なる既存のアセットを利用します。手っ取り早く試したかったので扱いが簡単であることを重要視しました。ドキュメントが見やすかったり、アセット(ソースコード)が1つで構成される、などです。
- JSONObject
- 配布元
- ライセンス/LGPL 2.1
パッと見る限り、上記URLからダウンロードできるJSONObject自体がLGPL2.1に反しているような…?
下準備
JSONObjectを扱う前に少しソースコードを修正する必要があります。これについては公式のドキュメントにも記載されています。JSONObjectがnullであるかどうかを判定する必要があるか、どうかに依存しますが基本的には次のようにJSONObjectのソースコードに書き加えれば動作します。(あるいはNullableを消すか)
書き加える場所は冒頭のLGPLライセンスに関するコメントの直下で良いでしょう。
//LGPLについて云々… //自分で追記 public class Nullable { //Extend this class if you want to use the syntax // if(myObject) //to check if it is not null public static implicit operator bool(Nullable o) { return (object)o != null; } }
JSONデータのパースの仕方
とりあえずダウンロードしたJSONObjectのソースコードをアセットに追加します。扱い方ですが、JSONObjectのインスタンスを生成する際にJSONテキストを引数にします。その後、"GetFieldメソッド"を利用してパラメータ名を指定して、対応する値を引き出します。数値はn(double型)、テキストはstr(string型)で取得します。試験していませんが配列はlist(ArrayList)だったはずです。
何れにせよ高機能ではないもののシンプルに扱えてしかも必要なアセットは1つだけなのは良い点です。サンプルプロジェクトではカメラにスクリプトを追加してコンソールに出力しています。
//仮のJSONテキスト. string jsonText = "{\"message\":\"SampleText\",\"num\":1}"; //JSONテキストを引数にしてJSONObjectを用意する. JSONObject json = new JSONObject(jsonText); //JSONObjectからデータの引き出し. string message = json.GetField("message").str; double num = json.GetField("num").n; //出力して確認する. print(message + "," + num.ToString());