Jsondecode error에 관해서

이찬영·2021년 12월 25일
0

Jsondecode error를 알기 위해서는 먼저 데이터 형식에 대해서 알아야 한다.

1. Json 포맷

크게 보면 Json은 세가지 포맷만 알면 된다.

1-1. 객체

형식 : { 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", ... } }

1-2. 배열

형식 : [ 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" }, ... ] }

1-3. 값

형식 및 설명 : 숫자 또는 문자열 등등..
예제 : 위 예제들에서 [ ] 나 { } 로 둘러싸인 것들 말고 나머지 atomic 한 것들..

그럼 다른 포맷들은 무엇이 있는지 알아보자

2. 다른 포맷들 종류

  • XML : XML의 tree구조는 자원을 표현하는 데에 그리 효과적인 포맷은 아니라고 한다.(Array의 표현이 어려움) 예전엔 많이 쓰였지만 현재는 안쓰여지고 있는 포맷이다.

  • YAML : 관례상 직렬화 포맷으로 잘 사용하지 않는다. 역직렬화 속도도 느리다.

  • Protobuf : 구글에서 개발한 data exchange format이다. 직렬화/역직렬화 속도가 빨라 성능 상의 이점이 있고, .prot파일을 정의 하는것 만으로 validation rule들을 정리하고, 비교적 적은 노력으로 API 문서화에도 응용할 수 있으며, 클라이언트 단은 proto컴파일을 통해 이들에 대응되는 클래스(DTO)들을 자동으로 정의할 수도 있어서 괜찮은 포맷이다.

3. Jsondecoder error

그럼 Jsondecoder error는 왜 발생하는거고 발생 메세지를 발송해야되는것일까?

3-1. 발생 이유

Json format 데이터가 아닌 다른 포맷으로 데이터가 전송 되었을때 발생하게된다.
그럼 발생을 하는 이유는 위에 설명과 같이 다른 데이터포맷이 왔을때 보내줘야 한다.
아래 사진은 제이슨디코더 에러 발생시 메시지 이다.

3-2 내가 겪었던 오류

회원가입 과정중에서 Jsondecoder error가 발송이 안되는 문제였다.

위에 사진과 같이 500에러가 발생하면서 Jsondecoder error를 발생 시켰지만, 메세지를 발송시키지는 못했다.


해결방법 : try 안에서 데이터를 받는 식을 작성함으로써 Jsondecoder error 메세지를발송 시킬 수 있었다.

profile
개발을 탐구하자

0개의 댓글