[Unity C#] LitJSONでJSON形式のデータをオブジェクトにマップする

広告:超オススメUnity Asset
  広告:超オススメUnity Asset

LitJSONを使って、読み込んだJSONをUnity内のオブジェクトにして扱いやすくするMEMOです。

LitJSONを組み込む

LitJson.dll をダウンロードしてUnityのAssets内に入れておきます。

00

 

例として、こんなJSONを読み込みます。

{
  "success": true,
  "hoge_data": {
    "id": 12345,
    "name": "Hoge",
    "uuid": "hogehoge-de91-45fe-a995-dd05682140a1"
  }
}

クラスを用意して、JSONデータをマップする

読み込む前提のJSONと同じ構造・型を持つクラスファイルを用意して、そのインスタンスにそっくりそのまま値が入るようにマップします。クラス定義は、こんな感じ。一例にすぎませんがここでは「ClassBox.cs」というファイルにこうしたクラスをまとめるようにしています。「success」「hoge_data」「id」「name」「uuid」という部分のキーの名称をJSONとクラスとて完全に一致させておきます。ここが一致していないとマップされずnullのままとなったりします。

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace ClassBox {

	public class HogeData
	{
		public int id;
		public string name;
		public string uuid;
	}

	public class HogeLogin
	{
		public bool success;
		public HogeData hoge_data;
	}

}

using LitJson;」したcsファイルで、マップするコードを書きます。(下記の「ret.json」部分には、読み込んだJSON stringが入っています)

hogeObj =  LitJson.JsonMapper.ToObject<ClassBox.HogeLogin>(ret.json);

「JsonMapper.ToObject」の後にクラス定義を指定してマップすると、そのクラスのインスタンスが代入されます。debugしてwatchしてみると、JSONの内容がそっくりそのまま入っていることが確認できます。

01

キー名部分をわざと間違えて、違う名称にしてみると、nullとなっていることも確認できます。

02

わざわざクラスや構造体を用意するのが面倒な気もしますが、とりあえず、これで扱いやすい状態にはなりました。

スポンサーリンク