JavaScript Object Notation (JSON)은 Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷입니다.
{
"level":1,
"timeElapsed":47.5,
"Name":"Player"
}
JSON 형식
JsonUtility
클래스를 사용하여 Unity 오브젝트를 JSON 포맷으로 상호 전환할 수 있습니다. 예를 들어 JSON 직렬화를 사용하여 웹 서비스와 상호작용하거나, 데이터를 텍스트 기반 포맷으로 쉽게 패킹하거나 언패킹한다.
JSON 데이터에 저장하려는 변수를 설명하는 클래스 또는 구조를 만든다
[Serializable]
public class MyClass
{
public int level;
public float timeElapsed;
public string name;
}
Serializable
속성으로 표시하여 JSON 시리얼라이저와 연동되도록 만듭니다.
MyClass myObject = new MyClass();
myObject.level = 1;
myObject.timeElapsed = 47.5f;
myObject.name = "Player";
클래스를 생성하고 값을 넣어준다.
JsonUtility.ToJson
메서드를 사용하여 오브젝트를 JSON 포맷으로 직렬화 한다.
string json = JsonUtility.ToJson(myObject);
// json : '{"level":1,"timeElapsed":47.5,"name":"Player"}'
ToJson
메서드는 JSON 출력을 보기 좋게 출력하는 기능을 지원한다. 이 기능은 기본적으로 꺼져 있지만, true
를 두 번째 파라미터로 전달하여 켤 수 있다 JsonUtility.ToJson(myObject, true);
JsonUtility.FromJson
메서드를 사용하여 JSON을 다시 오브젝트로 전환한다.
myObject = JsonUtility.FromJson<MyClass>(json);
using System.IO;
using UnityEngine;
[System.Serializable]
public class PlayerData
{
public int level;
public int stage;
public string name;
}
public class DataManager : MonoBehaviour
{
public PlayerData playerData = new PlayerData();
public void Awake()
{
LoadData();
}
public void SaveData()
{
// Json 직렬화 하기
string json = JsonUtility.ToJson(playerData);
// 외부 폴더에 접근해서 Json 파일 저장하기
// Application.persistentDataPath : 특정 운영체제에서 앱이 사용할 수 있도록 허용한 경로
File.WriteAllText(Path.Combine(Application.persistentDataPath, "PlayerData.json"), json);
}
public void LoadData()
{
// Json 파일 경로 가져오기
string path = Path.Combine(Application.persistentDataPath, "PlayerData.json");
// 지정된 경로에 파일이 있는지 확인한다
if (File.Exists(path))
{
// 경로에 파일이 있으면 Json을 다시 오브젝트로 변환한다.
string json = File.ReadAllText(path);
playerData = JsonUtility.FromJson<PlayerData>(json);
}
}
}