LitJSONを使って、読み込んだJSONをUnity内のオブジェクトにして扱いやすくするMEMOです。
LitJSONを組み込む
LitJson.dll をダウンロードしてUnityのAssets内に入れておきます。
例として、こんな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の内容がそっくりそのまま入っていることが確認できます。
キー名部分をわざと間違えて、違う名称にしてみると、nullとなっていることも確認できます。
わざわざクラスや構造体を用意するのが面倒な気もしますが、とりあえず、これで扱いやすい状態にはなりました。
東京造形大学卒業後、マクロメディア(現アドビ)に入社。QAやテクニカルサポートマネージャーとしてFlash、DreamweaverなどのWeb製品を担当。独立後、2007年に虫カゴデザインスタジオ株式会社を設立。2021年東京三鷹を拠点に。最近は、Unity, Unity Netcode for GameObjects, CakePHP, Laravel, ZBrush, Modo, Adobe Substance 3D, Adobe Firefly, Xcode, Apple Vision Pro, Firebaseにフォーカスしています。モバイルアプリ開発情報を主としたブログ「MUSHIKAGO APPS MEMO」の中の人。