멍멍이네 블로그

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;
}