【コピペでOK】UnityでJSONの読み込み・書き込みをする方法

Unity

はじめに

ここでは、UnityでJSONの読み書きをする方法を記載しています。

以下をコピペし、UnityのGameObjectにイベント割り当てをすればOKです。

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using UnityEngine.SceneManagement;

//JSONファイルと同じ形式とする。
/*
{
    item1: "hoge1",
    item2: "hoge2"
}
*/
[Serializable]
public class SettingItemData
{
    public string item1;
    public string item2;
}

public class JsonSettings : MonoBehaviour
{
    //JSONファイルのパスを記載する。
    private string jsonPath = "Assets/Resources/settings.json";

    //JSONファイルのファイル名を記載する。
    private string jsonfileName = "settings";

    // Start is called before the first frame update
    void Start()
    {  

    }


    // Update is called once per frame
    void Update()
    {
        
    }

    //JSONファイルを上書き保存する。
    private void saveSettings()
    {
        //書き込み元データを取得する。ここではsettings.jsonという
        string jsonData = Resources.Load<TextAsset>(jsonfileName).ToString();

        //JSONデータをオブジェクトに変換する
        SettingItemData settingJson = JsonUtility.FromJson<SettingItemData>(jsonData);

        //データを書き込む
        settingJson.item1 = "hogehoge" //書き込む内容
        settingJson.item2 = "hogehoge" //書き込む内容

        //stringに変換する
        string jsonstr = JsonUtility.ToJson(settingJson);

        //ファイル書き込み用のライターを開く
        StreamWriter writer = new StreamWriter(jsonPath, false);

        //書き込み
        writer.Write(jsonstr);

        //ライターを閉じる処理
        writer.Flush();
        writer.Close();
        
    }

    //JSONファイルを読み込む。
    private void loadSettings()
    {
        //ファイル名が間違ってる場合はエラーを出しとく
        if(!File.Exists(jsonPath)){
            Debug.Log("setting File not Exists");
            return;
        } 

        //JSONファイルを読み込む
        var json = File.ReadAllText(jsonPath);

        //オブジェクト化する
        var obj = JsonUtility.FromJson<SettingItemData>(json);

        //適当な変数に入れる
        var item1 = obj.item1;
        var item2 = obj.item2;
        
        //デバッグに表示する。
        Debug.Log(item1);
        Debug.Log(item1);
    }

}

説明

JSONオブジェクト

まず、JSONのクラスを作成する必要があります。オブジェクトの中身はJSONと同じ形式になるようにしてください。

//JSONファイルと同じ形式とする。
/*
{
    item1: "hoge1",
    item2: "hoge2"
}
*/
[Serializable]
public class SettingItemData
{
    public string item1;
    public string item2;
}

書き込み

JSONパスを宣言し(宣言する場所は任意です。関数の引数にしてもよいです。)、データを書き込みます。(データの書き込みももちろん引数にしてよいです。)

JSONの形式が崩れると嫌なので、先に保存するやつを読み出し、それに対して書き込みを行っています。(セーブデータや、ゲームキャラの能力情報など、上書き保存を前提として記載しています。)

    //JSONファイルのパスを記載する。
    private string jsonPath = "Assets/Resources/settings.json";

    //JSONファイルのファイル名を記載する。
    private string jsonfileName = "settings";


    //JSONファイルを上書き保存する。
    private void saveSettings()
    {
        //書き込み元データを取得する。ここではsettings.jsonという
        string jsonData = Resources.Load<TextAsset>(jsonfileName).ToString();

        //JSONデータをオブジェクトに変換する
        SettingItemData settingJson = JsonUtility.FromJson<SettingItemData>(jsonData);

        //データを書き込む
        settingJson.item1 = "hogehoge" //書き込む内容
        settingJson.item2 = "hogehoge" //書き込む内容

        //stringに変換する
        string jsonstr = JsonUtility.ToJson(settingJson);

        //ファイル書き込み用のライターを開く
        StreamWriter writer = new StreamWriter(jsonPath, false);

        //書き込み
        writer.Write(jsonstr);

        //ライターを閉じる処理
        writer.Flush();
        writer.Close();
        
    }

読み込み

JSONファイルを読み込んで、オブジェクト化します。その後、適当に変数などに放り込みます。

    //JSONファイルを読み込む。
    private void loadSettings()
    {
        //ファイル名が間違ってる場合はエラーを出しとく
        if(!File.Exists(jsonPath)){
            Debug.Log("setting File not Exists");
            return;
        } 

        //JSONファイルを読み込む
        var json = File.ReadAllText(jsonPath);

        //オブジェクト化する
        var obj = JsonUtility.FromJson<SettingItemData>(json);

        //適当な変数に入れる
        var item1 = obj.item1;
        var item2 = obj.item2;
        
        //デバッグに表示する。
        Debug.Log(item1);
        Debug.Log(item1);
    }

読み込み・書き込みの関数は適当な他動作とまとめて関数を作ってあげ、ボタンなどのオブジェクトに紐づけてあげればOK良いかと思います。

おわりに

こちらでは、UnityでJSONを利用する方法について記載しました!お疲れ様でした!

Amazon.co.jp

コメント

タイトルとURLをコピーしました