-
Json + Excel 응용(Json.Convert)유니티/Json 2024. 4. 25. 17:20
우선 json에 대한 아주 기본적인 설명이다
그리고 패키지 매니저에서 Newtonsoft Json이 설치되었는지 확인하자
이제 엑셀과 제이슨을 유니티에 응용하는 과정을 살펴보자
그전에 유용하게 쓰일 사이트들부터 소개하고 시작하겠다
어떠한 형식의 문서를 집어넣어도 JSON 형식의 텍스트로 변환해주는 사이트
(엑셀 -> JSON)
https://jsonformatter.curiousconcept.com/
입력한 텍스트를 JSON 형식의 파일에 맞춰준뒤 잘 작동된건지 확인까지 해주는 사이트
파일 저장까지 지원해준다.
우선 엑셀에 데이터 파일을 작성해준뒤 복사한다
Mr.Data Converter 에 복사한 데이터를 붙여넣으면 자동으로 JSON 형식으로 변환해준다
JSON형식으로 받은 파일을 복사해준뒤 JSON Formatter 사이트에 붙여넣어준다
문법에 이상이 없다면 VALID 라는 문구와 함께 잘 변형된것을 확인할 수 있다
우측상단에 다운로드 버튼을 눌러 해당 데이터를 텍스트 파일로 다운 받을수 있다
저장된 파일을 클릭해보면 메모장에 JSON 형식의 텍스트가 담긴것을 확인할 수 있다
이제 이 파일을 유니티 안에서 사용하는법을 알아보겠다
Assets에 "Resources"라는 이름으로 빈 폴더를 만들어준뒤 그 안에 방금 생성한 JSON 파일을 넣어주자
파일의 형식을 보면 Text Asset 형식으로 정해진것을 확인해 볼 수 있다
후에 코드를 작성하기 위해서 이 파일이 무슨 형식으로 저장되어 있는지를 알아야한다
우선 간단하게 출력하는것부터 시작해보겠다
using System.Collections.Generic; using UnityEngine; public class Test1 : MonoBehaviour { void Start() { TextAsset asset = Resources.Load<TextAsset>("data"); Debug.LogFormat("asset: {0}", asset); Debug.LogFormat("json: {0}", asset.text); } }
새 스크립트를 만들어준뒤 코드를 작성한다
TextAsset asset = Resources.Load<TextAsset>("data");
위에서 확인한것처럼 파일의 형식은 TextAsset이기에 해당 타입에 맞는 변수 asset을 만들어준뒤
그 안에 들어갈 값에 "data"라는 이름의 TextAsset 타입 파일을 Resources라는 폴더에서 로드해와 넣어준다
Debug.LogFormat("asset: {0}", asset);
Debug.LogFormat("json: {0}", asset.text);그리고 변수 asset과 asset뒤에 확장자를 붙여 각각 출력해보자
asset이나 asset.text나 둘다 똑같이 파일 그대로 출력되는것을 확인할 수 있다
자 이번엔 전체 출력 말고 데이터 하나하나씩 따로 출력해보도록 하자
using System.Collections; using System.Collections.Generic; using UnityEngine; using Newtonsoft.Json; public class Test2 : MonoBehaviour { void Start() { var asset = Resources.Load<TextAsset>("data"); var json = asset.text; var datas = JsonConvert.DeserializeObject<List<Data>>(json); // var datas = JsonConvert.SerializeObject(json); 직렬화는 이런 식으로 함 foreach (var data in datas) { Debug.LogFormat("{0}, {1}, {2}", data.id, data.name, data.sum); } } class Data { public int id; public string name; public float count; } }
이번엔 타입을 전부 var로 통일하였다
시작하기전에 가장 먼저 맨밑에 추가된 Data라는 클래스를 보자
이전 코드에서는 파일 자체를 통째로 출력하는것이니 상관없었지만
대부분 제이슨으로 만들어줄 코드는 클래스 형태여야 한다.
class Data { public int id; public string name; public float count; }
JSON 파일 정보와 관련된 Data라는 클래스를 하나 만들었고,
Data 클래스 내부에 저장하고 싶은 정보에 해당하는 변수들을 만들어준다.
자신이 Json으로 변환하고 싶은 정보를 변수처럼 적어주면 된다. 이제 이걸 위에서 List로 받아 배열처럼 각각 저장할것이다
자 이제 Test2를 살펴보자
아까보다 조금 더 복잡해졌다. 우선 변수 json에 data파일 정보를 값으로 받는것까지는 똑같지만
이번엔 그 json을 리스트 Data 안에 넣어 DeserializeObject 로 비직렬화 해준뒤 그 값을 변수 datas에 넣어준다
직렬화(Serialization) : 클래스 파일을 json 파일로 변환
비직렬화(Deserialization): json파일을 클래스 파일로 변환
이제 foreach문을 이용하여 datas안에 있는 값들을 목록별로 출력해보도록 하겠다
이제 목록 1개마다 출력이 되는것을 확인할 수 있다
사실 직렬화,비직렬화 할 수 있는 방법이 한가지 더 있다
바로 JsonConvert 대신 JsonUtility를 사용하는것
솔직히 문법이나 이런저런 것들이 유틸리티쪽이 훨씬 간편해보여 사용하고 싶었지만 둘의 차이점을 찾아보니
유틸리티쪽이 조금 더 지원하는 폭이 좁다. 사실 현재 내가 만들고 있는 게임의 볼륨을 생각하면 유틸리티도 충분하긴하다
심지어 유틸리티는 유니티 내에서 기본지원하는 기능이기에 솔직히 이게 더 편하긴하다
하지만 지금 헷갈리더라도 나중에 더 유용하게 쓰일수 있는 문법에 적응해보도록 하겠다
'유니티 > Json' 카테고리의 다른 글
Json + Excel 응용(JsonUtility) (0) 2024.04.26 Json 기초 정의 (0) 2024.02.14