Unity Json parser
https://wergia.tistory.com/164
JSON의 단점은 작은 문법 오류에도 매우 민감하다는 점이다. 중간에 중괄호나 대괄호, 콜론, 쉼표가 하나라도 빠지면 JSON 파일이 깨져버리고 파일을 읽어들일 수 없게 된다. 이런 문제 때문에 구글에서 JSON 검사기를 검색하면 JSON 데이터가 유효한지 검사해주는 웹페이지들이 많다. JSON 데이터를 작성하고 난 뒤에는 JSON 데이터 파일의 깨짐으로 인한 버그를 막기 위해서 이런 JSON 검사기로 검사하고 사용하는 것이 좋다.
유니티에서 JSON 사용하기
JSON에 대해서 간단하게 알아보았으니 이제 유니티에서 JSON을 사용하는 방법에 대해서 알아보자.
기본적인 JSON <-> Object 변환하기
우선 Json 예제를 작성할 JsonExample 클래스를 하나 생성한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class JsonExample : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
유니티가 제공하는 JsonUtility는 UnityEngine 네임스페이스에 포함되어 있기 때문에, 다른 using 지시문을 추가할 필요가 없다.
그리고 JSON 데이터와 오브젝트 간에 시리얼라이즈, 디시리얼라이즈 테스트를 위해 다음과 같은 클래스를 정의한다.
[System.Serializable]
public class JTestClass
{
public int i;
public float f;
public bool b;
public Vector3 v;
public string str;
public int[] iArray;
public List<int> iList = new List<int>();
public JTestClass() { }
public JTestClass(bool isSet)
{
if (isSet)
{
i = 10;
f = 99.9f;
b = true;
v = new Vector3(39.56f, 21.2f, 6.4f);
str = "JSON Test String";
iArray = new int[] { 1, 1, 3, 5, 8, 13, 21, 34, 55 };
for (int idx = 0; idx < 5; idx++)
{
iList.Add(2 * idx);
}
}
}
public void Print()
{
Debug.Log("i = " + i);
Debug.Log("f = " + f);
Debug.Log("b = " + b);
Debug.Log("v = " + v);
Debug.Log("str = " + str);
for (int idx = 0; idx < iArray.Length; idx++)
{
Debug.Log(string.Format("iArray[{0}] = {1}", idx, iArray[idx]));
}
for (int idx = 0; idx < iList.Count; idx++)
{
Debug.Log(string.Format("iList[{0}] = {1}", idx, iList[idx]));
}
}
}
여러 가지 타입과 배열, 리스트를 가지고 있는 클래스이기 때문에 오브젝트를 JSON 데이터로 변환하기에 좋은 클래스이다.
JSON 테스트용 클래스를 모두 작성했으면 JsonExample 클래스에 다음 함수 두 개를 구현한다.
string ObjectToJson(object obj)
{
return JsonUtility.ToJson(obj);
}
T JsonToOject<T>(string jsonData)
{
return JsonUtility.FromJson<T>(jsonData);
}
ObjectToJson() 함수는 JsonUtility 클래스의 ToJson() 함수를 이용해서 오브젝트를 문자열로 된 JSON 데이터로 변환하여 반환하는 처리를 하고 JsonToObject() 함수는 FromJson() 함수를 이용해서 문자열로 된 JSON 데이터를 받아서 원하는 타입의 객체로 반환하는 처리를 한다.
함수들을 모두 작성했다면 Start() 함수에 우선 ObjectToJson() 함수를 테스트하는 코드를 작성한다.
출처: https://wergia.tistory.com/164 [베르의 프로그래밍 노트]
댓글
댓글 쓰기