[Unity3D-php] JSON Parsing error (array type)
php -> unity로 배열 값을 보낼 때, json_encode를 이용해서 보낼 시, unity에서 받은 값으로 바로 JsonUtility로 파싱 할 수 없다.
이는 php와 unity에서 json 파싱하는 형태가 다르기 때문이다.
잘못 파싱할 경우 뜨는 에러&문제와 함께 방법을 알아보자.
JsonUtility.FromJson 할 경우
1. NullReferenceException: Object reference not set to an instance of an object
2. ArgumentException: JSON must represent an object type.
3. 에러는 없고 변수에 값이 안 들어가거나(array type인데 Debug.Log로 Length 찍어보면 0이 나옴)
위와 같은 다양한 오류를 볼 수 있다.
그러면 다시 한번 파싱을 제대로 했는지 확인해야 한다.(어딘가 잘못 짰으니, 에러가 뜨는 거겠죠)
1번과 2번 문제의 경우, 파싱 에러 - 앞에 "Items" 값을 추가해야 된다.
_value = "{\"Items\":" + _value + "}";
// retrun value
// [{"key1":"A","key2":"B"},{"key1":"C","key2":"D"}]
// need type for translate to json
// {"Items":[{"key1":"A","key2":"B"},{"key1":"C","key2":"D"}]}
_value = "{\"Items\":" + _value + "}";
php에서 json_encode로 값을 보낼 경우, 윗 줄과 같이 오는데, unity에서 JsonUtility.FromJson을 사용하기 위해선 밑의 형태로 바꿔줘야 한다.(array type)
꼭 "Items" 값이 들어가야 하며, 그래도 위와 같은 에러가 뜰 경우 Debug로 괄호나 역슬러시, 큰따옴표 등 값이 제대로 들어갔는지 확인!
3번 문제의 경우, Serializable 선언을 확인해주자.
FromJson의 type의 class를 Serializable 선언해주자.
using System; // Serializable
[Serializable]
public class KeyClass
{
public string key1;
public string key2;
}
'프로그래밍 > Unity3D' 카테고리의 다른 글
[Unity3D/C#] CSVReader (엑셀 파일 리더기) (0) | 2021.07.24 |
---|---|
[Unity3D/펌] 쉐이도 강좌 - 기초 (0) | 2016.07.08 |
[Unity3D]Rejected because no crossdomain.xml policy file was found (0) | 2015.12.24 |
[Unity3D/FacebookAPI] Unable to verify assembly data; you must provide an authorization key when loading this assembly. (0) | 2015.08.26 |
[Unity3D] 드로우 콜 (Draw Call)에 관하여 (0) | 2015.08.19 |