Jsondecode error를 알기 위해서는 먼저 데이터 형식에 대해서 알아야 한다.
크게 보면 Json은 세가지 포맷만 알면 된다.
형식 : { Name : Value, Name : Value, ... }
설명 : Name 은 그냥 변수이름틱한 string, Value 는 Json Object, Json Array, 또는 Json Value 다.
Value 형식이 Json Object 가 될 수 있다는 것은 nested 된다는 뜻이다.
예제 : { "ID" : "ABC1213", "NAME" : "Youngin Shin", "Parameters" : { "Age" : 34, "Gener" : "M", ... } }
형식 : [ Value, Value, Value, ... ]
설명 : Name 없이 value 만 있는 배열. []
로 열고 닫음. 여기서도 Value 는 Json Object, Json Array,
또는 Json Value 다. Value 형식이 Json Array 가 될 수 있다는 것은 nested 된다는 뜻이다.
예제 : { "ClickTimes" : [0, 2, 3, 5, 6, 8]
, "Users" : [ { "ID" : "1" }, { "ID" : "2" }, ... ]
}
형식 및 설명 : 숫자 또는 문자열 등등..
예제 : 위 예제들에서 [ ]
나 { } 로 둘러싸인 것들 말고 나머지 atomic 한 것들..
그럼 다른 포맷들은 무엇이 있는지 알아보자
XML : XML의 tree구조는 자원을 표현하는 데에 그리 효과적인 포맷은 아니라고 한다.(Array의 표현이 어려움) 예전엔 많이 쓰였지만 현재는 안쓰여지고 있는 포맷이다.
YAML : 관례상 직렬화 포맷으로 잘 사용하지 않는다. 역직렬화 속도도 느리다.
Protobuf : 구글에서 개발한 data exchange format이다. 직렬화/역직렬화 속도가 빨라 성능 상의 이점이 있고, .prot파일을 정의 하는것 만으로 validation rule들을 정리하고, 비교적 적은 노력으로 API 문서화에도 응용할 수 있으며, 클라이언트 단은 proto컴파일을 통해 이들에 대응되는 클래스(DTO)들을 자동으로 정의할 수도 있어서 괜찮은 포맷이다.
그럼 Jsondecoder error는 왜 발생하는거고 발생 메세지를 발송해야되는것일까?
Json format 데이터가 아닌 다른 포맷으로 데이터가 전송 되었을때 발생하게된다.
그럼 발생을 하는 이유는 위에 설명과 같이 다른 데이터포맷이 왔을때 보내줘야 한다.
아래 사진은 제이슨디코더 에러 발생시 메시지 이다.
회원가입 과정중에서 Jsondecoder error가 발송이 안되는 문제였다.
위에 사진과 같이 500에러가 발생하면서 Jsondecoder error를 발생 시켰지만, 메세지를 발송시키지는 못했다.
해결방법 : try 안에서 데이터를 받는 식을 작성함으로써 Jsondecoder error 메세지를발송 시킬 수 있었다.