본문 바로가기

유니티/매뉴얼

[유니티 매뉴얼] JSON 직렬화

728x90
반응형

1. JSON 이란?

JSON(제이슨, JavaScript Object Notation)은 이름과 값으로 이루어진 데이터 오브젝트로, 웹이나 네트워크에서 데이터를 주고 받을 때 사용하는 개방형 표준 포멧입니다.

JSON 데이터는 텍스트로 되어 있어 읽기 쉽다는 장점을 가지고 있고, 내용을 함축적으로 최소의 정보만을 사용하기 때문에, XML에 비해 용량이 작고, 속도도 빠릅니다.

 

JSON 데이터 기본 형태는 데이터명, 클론(:), 값 순서로 구성되어 있습니다.

 

"데이터명":값

 

데이터명과 문자열은 ""(큰 따음표)로 감싸야 합니다.

 

"name":"Coderzero"

 

JSON은 다음과같은 데이터형을 지원합니다.

  • 숫자(number) : 정수, 실수, 지수 
  • 문자열(string)
  • 불리언(boolean)
  • 객체(object)
  • 배열(array)
  • NULL

JSON 객체는 {}(중괄호)로 둘러 쌓으면 되고, 각 프로퍼티는 ,(쉼표)로 분리합니다.

 

{
    "name": "coderzero",
    "age": 48,
    "height": 172.1,
    "man": true,
    "description": null
}

 

JSON 배열은 [](대괄호)를 사용하여 묶습니다.

그리고, ,(쉼표)를 사용하여 분리합니다

 

"coder":[
    {"name":"coderzero", "age":48, "height": 172.1},
    {"name":"coderone", "age":8, "height": 102.1}
]

 

2. JSON 직렬화

 

2.1 네임스페이스

 

Serializable를 사용하기 위해서 System을, File 클래스를 사용하기 위해서 System.IO를 using 하여야 합니다.

 

using System; // 네임스페이스 Serializable
using System.IO; // 네임스페이스 File

 

 

2.2 Json 데이터 클래스 생성

 

JSON 직렬화는 구조화된 JSON 개념을 사용합니다.

즉 JSON 데이터에 저장하려는 변수를 설명하는 클래스 또는 구조를 만들어야 합니다. 

 

[Serializable]
public class JsonData
{
    public string name;
    public int age;
    public float height;
    public bool man;
    public string description;
    public string[] tools;
}

 

 

2.3 클래스 인스턴스 생성 후 값 할당

 

JsonData jsonData = new JsonData();
jsonData = new JsonData();
jsonData.name = "coderzero";
jsonData.age = 48;
jsonData.height = 172.5f;
jsonData.man = true;
jsonData.description = null;
jsonData.tools = new string[3];
jsonData.tools[0] = "Unity";
jsonData.tools[1] = "Visual Studio";
jsonData.tools[2] = "Phtoshop";

 

 

2.4 인스턴스를 Json 포맷으로 직렬화

 

JsonUtility.ToJson메서드를 사용합니다.

 

string toJson = JsonUtility.ToJson(jsonData);

 

{"name":"coderzero","age":48,"height":172.5,"man":true,"description":"","tools":["Unity","Visual Studio","Phtoshop"]}

 

 

2.5 Json 포맷에서 클래스나 구조체로 역직렬화

 

JsonData fromJson메서드를 사용합니다.

 

JsonData fromJson = JsonUtility.FromJson<JsonData>(toJson);

 

 

2.6 파일 저장

 

File.WriteAllText 메서드를 사용합니다.

 

File.WriteAllText(@"D:\JsonExample.json", toJson);

 

 

2.7 파일 읽기

 

File.ReadAllText 메서드를 사용합니다.

 

string readJson = File.ReadAllText(@"D:\JsonExample.json");

 

 

2.8 예제

 

using UnityEngine;
using System; // 2.1 네임스페이스 Serializable
using System.IO; // 2.1 네임스페이스 File

// 2.2 Json 데이터 클래스 생성
[Serializable]
public class JsonData
{
    public string name;
    public int age;
    public float height;
    public bool man;
    public string description;
    public string[] tools;
}

public class JsonExample : MonoBehaviour
{
    void Start()
    {
        // 2.3 클래스 인스턴스 생성 후 값 할당
        JsonData[] jsonData = new JsonData[2];
        jsonData[0] = new JsonData();
        jsonData[0].name = "coderzero";
        jsonData[0].age = 48;
        jsonData[0].height = 172.5f;
        jsonData[0].man = true;
        jsonData[0].description = null;
        jsonData[0].tools = new string[3];
        jsonData[0].tools[0] = "Unity";
        jsonData[0].tools[1] = "Visual Studio";
        jsonData[0].tools[2] = "Phtoshop";

        jsonData[1] = new JsonData();
        jsonData[1].name = "coderzero";
        jsonData[1].age = 48;
        jsonData[1].height = 172.5f;
        jsonData[1].man = true;
        jsonData[1].description = null;
        jsonData[1].tools = new string[2];
        jsonData[1].tools[0] = "3D Max";
        jsonData[1].tools[1] = "Photoshop";

        // 2.4 인스턴스를 Json 포맷으로 직렬화
        string toJson0 = JsonUtility.ToJson(jsonData[0]);
        Debug.Log(toJson0); // 출력 : {"name":"coderzero","age":48,"height":172.5,"man":true,"description":"","tools":["Unity","Visual Studio","Phtoshop"]}

        string toJson1 = JsonUtility.ToJson(jsonData[1]);
        Debug.Log(toJson1); // 출력 : {"name":"coderzero","age":48,"height":172.5,"man":true,"description":"","tools":["3D Max","Photoshop"]}

        // 2.5 Json 포맷에서 클래스나 구조체로 역직렬화
        JsonData fromJson = JsonUtility.FromJson<JsonData>(toJson0);
        Debug.Log(fromJson.name); // 출력 : coderzero

        // 2.6 파일 저장
        File.WriteAllText(@"D:\JsonExample.json", toJson1);

        // 2.7 파일 읽기
        string readJson = File.ReadAllText(@"D:\JsonExample.json");
        Debug.Log(readJson); // 출력 : {"name":"coderzero","age":48,"height":172.5,"man":true,"description":"","tools":["3D Max","Photoshop"]}
    }
}

 

728x90
반응형