Developer

【初心者Unity】JsonUtilityクラスでJSONを扱う方法
2022.10.28
Lv1

【初心者Unity】JsonUtilityクラスでJSONを扱う方法

1.はじめに

本記事では、JsonUtilityクラスでJSONを扱う方法を紹介します。
初心者向けの記事ですので最初に、JSONとは何か、どんな時に使うのかを簡単に説明します。
JSONについての説明が必要のない方は3.JsonUtilityの使い方から読み進めてください。

2.JSONとは

JSONは文字列のデータ形式の一種で、以下のようなフォーマットの文字列を指します。

●データ構造
{
    “キー1”: 値1,
    “キー2”: 値2,
    …
}

●例
{
    “name”: “Morishita”,
    “age”: 31,
    “from”: “Kyoto”
}

JSONとは「JavaScript Object Notation」の略で、日本語にすると「JavaScriptにおけるオブジェクト表記方法」といった具合になります。
JavaScript とはプログラミング言語の一種で、JSON はもともとは JavaScript における仕様でしたが、現代では多くのプログラミング言語がサポートする標準的な仕様となっています。

ゲーム開発では、セーブデータのローカル保存や通信の際であったり、マスターデータの管理などで JSON形式を使用することが多いです。
これらに共通する通り、ゲーム内外でのデータのやり取りが主な用途になります。

たとえばセーブデータのロード、セーブの流れを図にしたのが下図です。

この中で今回の記事で扱う対象は、②と④、すなわち、「JSONとC#オブジェクト間の変換」になります。
次のセクションでは JsonUtilityクラスを使ってこれらの処理の実装方法を紹介します。

3.JsonUtilityの使い方

① JSON → C#オブジェクトへの変換

●構文

MyClass obj = JsonUtility.FromJson<MyClass>(json);

※json は string 型の変数で、JSON形式のデータが入力されているとする

●サンプルコード

using System;
using UnityEngine;

public class JsonSample : MonoBehaviour
{
    [Serializable]
    public class User
    {
        public string name;
        public int age;
        public string from;
    }

    void Start()
    {
        // JSON文字列
        string json = "{\"name\": \"Morishita\", \"age\": 31, \"from\": \"Kyoto\"}";

        // JSON → Userクラス
        User user = JsonUtility.FromJson<User>(json);

        Debug.Log("name →" + user.name);
        Debug.Log("age →" + user.age);
        Debug.Log("from →" + user.from);
    }
}

※Serializable属性について
Serializable属性は、オブジェクトがシリアライズ可能であることを示す属性です。
ここでは「シリアライズ = JSONにすること」、と思っていただいて構いません。
詳細仕様の説明は省きますが、JSON変換をするクラスには基本的に付けると考えて間違いはありません。

② C#オブジェクト → JSONへの変換

●構文

string json = JsonUtility.ToJson(obj);

※obj は クラスオブジェクトとする

●サンプルコード

using System;
using UnityEngine;

public class JsonSample : MonoBehaviour
{
    [Serializable]
    public class User
    {
        public string name;
        public int age;
        public string from;
    }

    void Start()
    {
        User user = new User();
        user.name = "Morishita";
        user.age = 31;
        user.from = "Kyoto";

        // Userクラス → JSON
        string newJson = JsonUtility.ToJson(user);

        Debug.Log("json →" + newJson);
    }
}

4.おわりに

今回は JsonUtilityクラスの使い方を説明しました。
JsonUtilityクラスは実行速度面でかなり優秀ですので、Unity で JSON を扱うとなった場合はまずはこれを使っておけば間違いありません。
ただし、機能の多さという意味では他のライブラリに劣るケースもありますので、その場合には JsonUtility 以外のクラスを検討するといった形で使い分けができると良いと思います。

 

連載目次リンク

「初心者のための」Unityゲーム制作 目次
 

Unity実践編 - 目次リンク

実践Unityゲームプログラミング 連載目次