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

スポンサーリンク

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

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

東京造形大学卒業後、マクロメディア(現アドビ システムズ)に入社。Quality AssuranceやテクニカルサポートマネージャーとしてFlash、DreamweaverなどのWeb製品を担当。独立後、虫カゴデザインスタジオ株式会社を設立。最近は、ZBrush、Xcode(Swift)、Firebase、Unity、Adobe Creative Cloud関連にフォーカスしています。。モバイルアプリ開発情報を主としたブログ「MUSHIKAGO APPS MEMO」の中の人。