-
비직렬화 오류유니티/오류&문제점 2024. 2. 14. 15:59
public class Test8Main2 : MonoBehaviour { void Start() { //TextAsset로드 var asset = Resources.Load<TextAsset>("Weapon_Data"); //JSON문자열 가져오기 string json = asset.text; //출력 하기 Debug.Log(json); } }
분명 여기까지는 정상적으로 잘 작동이 된다
public class Test8Main2 : MonoBehaviour { void Start() { //TextAsset로드 var asset = Resources.Load<TextAsset>("Weapon_Data"); //JSON문자열 가져오기 string json = asset.text; //출력 하기 Debug.Log(json); //역직렬화 WeaponData data = JsonConvert.DeserializeObject<WeaponData>(json); Debug.LogFormat("=> {0}, {1}", data.id, data.name); } }
public class WeaponData { public int id; public string name; public string damage; }
근데 문제는 이렇게 쓰고 역직렬화만 들어가면 정상적으로 역직렬화 밑부분까지 출력이 되질않는다
보면 첫번째 출력은 잘 나오는 반면 두번째 출력은 에러가 뜬다. 어제부터 이러는데 도대체 이게 뭘까
패키지 매니저에서 Newtonsoft Json도 설치했다
오류 검색을 해보니 나와 거의 비슷한 오류를 가진 사람을 찾았다
이런저런 해결 방법이 댓글로 많이 달렸는데 효과가 있는건 아무것도 없었다
그래서 카페로 들어가 짜주신 코드를 처음부터 다시 보았다
using Newtonsoft.Json; using System.Collections; using System.Collections.Generic; using UnityEngine; public class Test8Main2 : MonoBehaviour { void Start() { //TextAsset로드 var asset = Resources.Load<TextAsset>("item_data"); //JSON문자열 가져오기 string json = asset.text; //출력 하기 Debug.Log(json); //역직렬화 ItemData data = JsonConvert.DeserializeObject<ItemData>(json); Debug.LogFormat("=> {0}, {1}", data.id, data.name); } }
이게 원본 코드이다. 맞게 한것같은데 뭐가 문제일까. 분명 알것같기도 한데 별것도 아닌거 하나를 놓치고 있는것같다ㅠ
문제를 찾았다. json파일을 보게되면 문자열이 대괄호로 시작해서 대괄호로 닫힌걸 알 수 있다
json 파일에서 대괄호는 배열을 의미하고, json 문자열이 배열이라면 객체도 배열 객체로 나와야한다
ex)
[
{
"id": 100,
"name": "Collect Golds",
"icon_name": "icon_coins_pouch",
"goal_description": "Collect 10,000 Golds",
"goal_value": 10000,
"reward_icon_name": "icon_color_energy",
"reward_amount": 1
}]
Quest[] data = JsonConvert.DeserializeObject<Quest[]>(json); Debug.LogFormat("=> {0}, {1}", data[0].id, data[0].name);
그렇기에 양쪽 변수와 값에 배열처리를 해준뒤 당연하게도 출력할시 data변수의 배열과 몇번째 배열일지 지정해줘야 한다
물론 이렇게 쓰는건 귀찮으니 for문이나 foreach문으로 쭉 출력해주도록 하자
List<Quest> datas = JsonConvert.DeserializeObject<List<Quest>>(json); for (int i = 0; i < datas.Count; i++) { Quest data = datas[i]; Debug.LogFormat("=> {0}", data.id); } foreach (Quest data in datas) { Debug.LogFormat("=> {0}", data.id); } } }
'유니티 > 오류&문제점' 카테고리의 다른 글
오디오 소스 삽입 에러 (1) 2024.07.14 Draw Mode - Sliced 이미지 깨짐 (0) 2024.05.10 Inspector창에서 변하지 않는 변수값 (0) 2024.03.06 충돌판정 오류 (0) 2024.03.05 텍스쳐 입력받기 오류 (0) 2024.02.21