본문 바로가기
Engine/Unity

Unity에서 JSON 사용하기

by 뇌 속의 통 2025. 7. 7.

1. JSON 이란?

JavaScript Object Notation의 약자로 데이터를 저장하고 교환하기 위한 텍스트 기반의 '형식'을 말합니다.

여기서 중요한 것은 하나의 형식이라는 것입니다. 쉽게 말하자면 단순히 데이터를 표시하는 표현 방법의 일종이라고 보면 됩니다.

 

그러면 JSON을 많이 쓰는 이유는 무엇일까요?

이 질문에 대한 대답을 하기 위해선, JSON의 형태에 대해서 볼 필요가 있습니다.

 

//JSON 예시

{
    "Name : SW",
    "Gender : Male",
    "Age : 31"
}

 

우선 이름(Name)이 SW이고, 성별(Gender)은 남성,  나이(Age)는 31살인걸 알 수 있습니다.

 

눈에 바로 들어오죠? JSON은 이와 같이 사람이 읽고 쓰기 쉽다는 장점이 있습니다. 단순한 텍스트 형식이며 구조가 명확해 가독성이 뛰어나죠.

 

두번째로 JSON은 JavaScript는 물론, Java, C#, Python 등 다양한 언어에서 JSON 파싱과 생성이 기본 라이브러리로 제공되어 사용하기 쉽습니다.

 

그러면 유니티에서도 JSON 형태로 저장하고 불러오는 방식을 쓴다면 다른 프로그램들과 데이터를 주고 받기가 훨씬 편하겠죠?

 

2. 유니티에서 JSON 사용하기

유니티에서는 관련 기능을 JsonUtility를 이용하여 제공해주고 있습니다.

 

 - JsonUtility.ToJson(object obj) : 오브젝트를 받아 JSON 형태로 만들어주는 함수

    public class Animal
    {
        public string name;
        public int damage;
    }

    private void Awake()
    {
        Animal animal = new Animal();
        animal.name = "치타";
        animal.damage = 100;

        string animalToJson = JsonUtility.ToJson(animal);
    }

 

위와 같이 작성된 코드를 바탕으로 animalToJson를 출력해보면 다음과 같이 나온다.

{"name":"치타", "Damage":"100"}

 

좀 더 읽기 쉽도록 구분해주면 아래와 같다.

{
    "name":"치타", 
    "Damage":"100"
}

 

아까 봤던 JSON 형태와 동일한 것을 알 수 있다.

이렇게 JSON으로 바꾼 데이터를 서버로 보내면 서버에서는 해당 데이터를 JSON으로 읽으면 된다.

 

- JsonUtility.FromJson<T>(string str) : str(JSON형태의 데이터)를 T 타입으로 변환하는 함수

    public class Animal
    {
        public string name;
        public int damage;
    }

    private void Awake()
    {
        Animal animal = new Animal();
        animal.name = "치타";
        animal.damage = 100;

        string animalToJson = JsonUtility.ToJson(animal);

        Animal jsonToAnimal = JsonUtility.FromJson<Animal>(animalToJson);
    }

서버 입장에서는 전달받은 데이터를 JSON 형태에서 적절한 형태로 변환하여 사용하면 된다.

위와 같이 FromJson<T>를 통해 T 타입으로 변환하는 것이다.

 

3. JSON 저장해서 외부로 전달하기

    public class Animal
    {
        public string name;
        public int damage;
    }

    private void Awake()
    {
        Animal animal = new Animal();
        animal.name = "치타";
        animal.damage = 100;

        string animalToJson = JsonUtility.ToJson(animal);
        string path = Path.Combine(Application.persistentDataPath, "animal.json");
        File.WriteAllText(path, animalToJson);
    }

JsonUtility.ToJson을 이용하여 Object를 JSON 형태로 변환(animalToJson).

저장할 위치 설정(path) 후 해당 path에 animalToJson 문자열을 저장해주면 된다.

 

이러면 해당 위치에 animal.json이라는 파일이 생성되는 것을 볼 수 있다.

Application.persistentDataPath는 C:\Users\사용자명\AppData\LocalLow\회사이름\프로젝트이름\ 이니 확인해보도록 하자.

 

 

4. 저장된 JSON 파일 불러오기

    public class Animal
    {
        public string name;
        public int damage;
    }

    private void Awake()
    {
        Animal animal = new Animal();
        animal.name = "치타";
        animal.damage = 100;

        string animalToJson = JsonUtility.ToJson(animal);
        string path = Path.Combine(Application.persistentDataPath, "animal.json");
        File.WriteAllText(path, animalToJson);
    }

    void Start()
    {
        string path = Path.Combine(Application.persistentDataPath, "animal.json");

        if (File.Exists(path))
        {
            string json = File.ReadAllText(path);
            Animal animal = JsonUtility.FromJson<Animal>(json);

            Debug.Log($"이름: {animal.name}, 공격력 : {animal.damage}");
        }
    }

 

Awake에서 저장한 json 파일을 Start에서 불러와보도록 하자.

우선 파일이 있는 위치를 path에 저장한다.

 

해당 위치에 파일이 존재하는지 File.Exists 전역 함수를 통해 확인하고 존재한다면, 해당 File의 Text를 모두 읽어와서 FromJson 함수를 통해 Object로 변환해준다.

'Engine > Unity' 카테고리의 다른 글

Sprite Shape을 이용하여 땅 만들기(Unity 2D)  (2) 2025.07.18
Unity에서 csv 파일 읽어오기(엑셀, 메모장)  (2) 2025.07.08
Unity Coroutine  (0) 2025.02.20
Unity Drag & Drop  (0) 2025.02.19
Unity MathF  (0) 2025.02.17