본문 바로가기
개발/Unity

유니티 - JsonUtility로 Json 내보내기 : (4) Export

by 피로물든딸기 2022. 6. 25.
반응형

Unity 전체 링크

 

JsonUtility로 Json 파싱하기

 

(1) Json Parsing
(2) Json Array Parsing (배열 파싱)
(3) Array of Objects in Json Array Parsing (배열 안에 있는 오브젝트 배열 파싱)
(4) Json Export (파일 출력, 내보내기)


이제 class를 json으로 export 해보자.

 

foreach에서 id를 각각 1씩 증가시킨 후, 값이 제대로 변경되었는지 확인한다.

File 출력(WriteAllText)를 사용해가 위해 System.IO를 선언한다.

using System.IO;

...

    void Start()
    {
        TextAsset textAsset = Resources.Load<TextAsset>("Json/LottoWinningNumber");

        LottoNumbers lottoList = JsonUtility.FromJson<LottoNumbers>(textAsset.text);

        foreach (Lotto lt in lottoList.winning)
        {
            lt.id++; /* 값 변경 */

            lt.printNumbers();
            Debug.Log("=============");
        }

        string classToJson = JsonUtility.ToJson(lottoList);
        Debug.Log(classToJson);

        string fileName = "test.json";
        string path = Application.dataPath + "/" + fileName;

        File.WriteAllText(path, classToJson);
        Debug.Log(path);
    }

 

파일 이름(확장자 json 포함)을 포함한 경로(path)와 출력할 내용을 WriteAllText에 넣어주면 된다.

Application.dataPath는 유니티 프로젝트의 경로에 Assets이 추가된 경로다.

[C:/Users/.../[Unity_Project]/Assets] 

    string fileName = "test.json";
    string path = Application.dataPath + "/" + fileName;

    File.WriteAllText(path, classToJson);
    Debug.Log(path); //C:/Users/.../[Unity_Project]/Assets/test.json

 

스크립트를 실행해서 test.json 파일을 확인해보자.

id 0이 1로 변경되었다. 하지만 한 줄로 출력되어 읽기가 불편하다.

 

JsonUtility.ToJson에서 prettyPrint 옵션true로 넣어보자.

string classToJson = JsonUtility.ToJson(lottoList, true /* prettyPrint */);

 

그러면 json이 아래와 같이 정리되어서 보인다.

 

최종 코드는 아래와 같다.

using System; /* for Serializable */
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;

public class ParsingJson : MonoBehaviour
{
    [Serializable]
    public class testCase //aray of objects
    {
        public int test1;
        public string test2;
        public int[] test3;
    }

    [Serializable]
    public class Lotto
    {
        public int id;
        public string date;
        public int[] number;
        public int bonus;
        public testCase[] test; /* 추가 */

        public void printNumbers()
        {
            string str = "numbers : ";
            for (int i = 0; i < 6; i++) str += number[i] + " ";

            Debug.Log(str);
            Debug.Log("bonus : " + bonus);

            for (int i = 0; i < test.Length; i++)
            {
                Debug.Log("test1: " + test[i].test1);
                Debug.Log("test2: " + test[i].test2);

                for (int k = 0; k < test[i].test3.Length; k++)
                    Debug.Log("test3 [" + k + "] " + test[i].test3[k]);
            }
        }
    }

    public class LottoNumbers
    {
        public Lotto[] winning;
    }

    void Start()
    {
        TextAsset textAsset = Resources.Load<TextAsset>("Json/LottoWinningNumber");

        LottoNumbers lottoList = JsonUtility.FromJson<LottoNumbers>(textAsset.text);

        foreach (Lotto lt in lottoList.winning)
        {
            lt.id++; /* 값 변경 */

            lt.printNumbers();
            Debug.Log("=============");
        }

        string classToJson = JsonUtility.ToJson(lottoList, true /* prettyPrint */);
        Debug.Log(classToJson);

        string fileName = "test.json";
        string path = Application.dataPath + "/" + fileName;

        File.WriteAllText(path, classToJson);
        Debug.Log(path);
    }
}

(1) Json Parsing
(2) Json Array Parsing (배열 파싱)
(3) Array of Objects in Json Array Parsing (배열 안에 있는 오브젝트 배열 파싱)
(4) Json Export (파일 출력, 내보내기)

 

Unity Plus:

 

Easy 2D, 3D, VR, & AR software for cross-platform development of games and mobile apps. - Unity Store

Have a 2D, 3D, VR, or AR project that needs cross-platform functionality? We can help. Take a look at the easy-to-use Unity Plus real-time dev platform!

store.unity.com

 

Unity Pro:

 

Unity Pro

The complete solutions for professionals to create and operate.

unity.com

 

Unity 프리미엄 학습:

 

Unity Learn

Advance your Unity skills with live sessions and over 750 hours of on-demand learning content designed for creators at every skill level.

unity.com

반응형

댓글