본문 바로가기

iOS/Objective-C

Objective-C) JSON을 Encoding 해보자

 

 

안녕하세요 :) 소들입니다🐮

오늘은 Objective-C에서 어떻게 JSON Encoding 하는지

알아볼 거예여!!!!!!!!!!!!!!! 

이번 JSON Encoding에 사용할 클래스는

 

NSJSONSerialization

 

이라는 클래스구요!!! 👀

혹시 JSON에 대한 기초가 없으신 분이라면,

JSON이 도대체 뭘까? 이 포스팅을 꼭 읽고 와주세여~~

모든 포스팅은 편의 말투로 합니다~!!

 

 

 

 

1. JSON Encoding이 뭔가요?

 

자, 먼저 iOS에서 JSON Encoding 한다는 게 무슨 말이냐면,

 

 

위 그림처럼

 

Array나 Dictionary를 NSData로 바꾸는 것

 

을 말함!!!

 

이해가 안 가실 분들을 위해서 다시 처음으로 돌아가서,

그럼 JSON Encoding 이라는 말이 뭘까??? JSON Encoding이라는 말은

 

JSON 데이터를 만든다

 

라는 말임. 따라서, 우리는

Array, Dictionary의 형태를 갖고, NSData를 만들 것임!!

 

근데 JSON 데이터를 만든다면서, 왜 뜬금 없는 NSData를 만드는 것임? 이라 생각할 수 있는데,

우리가 통신할 때 사용하는 이 JSON 데이터는 HTTP 메시지 중에 바디에 들어간다고 이전에 공부 했음!!

 

 

 

 

 근데 iOS에서는 이 바디에 들어가는 Data의 형식이 NSData임!

(네트워크에 사용되는 데이터가 NSData 형식)

따라서 JSON 데이터를 만든다는 것은, JSON 형태의 NSData를 만든단 것과 같음!

 

근데 JSON이 도대체 뭘까 포스팅에서 배웠듯이,

JSON은 총 2가지 객체를 지원함

 

JSON 객체

JSON 배열

 

근데 이 두 가지가, Objective-C에선 (Swift 동일)

JSON 객체Dictionary로, JSON 배열 Array로 구현되기 때문에

따라서 Dictionary & Array 형식만 JSON으로  만들 수 있는 것임!!!

 

이해 되셨길ㅎㅎㅎㅎㅎ

 

 

 

 

2. JSON Encoding 메서드 살펴보기

 

우리가 Encoding에 사용할 메서드는 다음과 같은데

 

 

파라미터 하나하나 살펴보자 :)

 

 

 

2-1. obj : 첫 번 째 파라미터

 

먼저, 첫 번째 파라미터Dictionary, Array 계열의 객체를 넣어주면 됨

(NSDictionary, NSMutableDictionary, NSArray, NSMutableArray 등)

 

근데 Type이 id인데,  Dictionary나 Array말고 아무거나 넣으면 어케됨?

 

 

 

 

이런 Error를 맞이하고 싶다면,  아무 타입 넣는 거 환영 🌸

나는 다음과 같이 JSON으로 Encoding 할 Dictionary를 만들어보겠음

 

NSMutableDictionary *myDictionary = [[NSMutableDictionary allocinit];
myDictionary[@"name"= @"Sodeul";
myDictionary[@"gender"]  = @"female";

 

난 Dictionary로 만들었지만 Array도 상관 없음!!

 

 

 

2-2. options : 두 번째 파라미터

 

자, 먼저 Option이 뭐가 있냐면,

 

 

 

 

이렇게 총 4가지 Option이 있음

 

 

 NSJSONWritingFragmentsAllowed 

 

 

 

ㅋ..... Default 아닐까 생각해봅니다

 

 

 NSJSONWritingPrettyPrinted 

 

Pretty Printed.. 말 그대로 출력 시 형식에 맞춰 이쁘게 만들어짐

이 Option을 적용 했을 때랑 안 했을 때 차이를 보면 이해할 수 있움!

 

 

 

NSJSONWritingFragmentsAllowed 일 때 출력

 

 

 

NSJSONWritingPrettyPrinted 일 때 출력

Pretty 하군

 

 

 NSJSONWritingSortedKeys 

 

이건, 이름 그대로 Dictionary일 때 Key에 맞춰 오름차순 정렬하겠단 말임!!!

 

 

 

이랬던 데이터가

 

 

 

 

이렇게 오름차순으로 바뀐답니다~~~ (g -> n)

 

 

 

 NSJSONWritingEscapingSlashes 

 

이게 뭐냐면, 

만약 다음과 같은 Value 값을

 

 

 

Encoding 하면 어떻게 되냐면,

 

 

 

이렇게 /(Escape Sequence)가 \/로 바뀌어서 나옴

왜냐면, JSON에서 /이 이미 유효한 Sequence이기 때문인데,

 

근데 이 옵션을 주면,

 

 

 

이렇게 원하는 모양으로 정상 출력 됨!!!!! :)

 

 

 

2-3. error : 세 번째 파라미터

 

Error 처리는 NSError 객체 하나 만드시면 댐 :)

 

 

NSError *error = nil;

 

자 파라미터 살펴보기 끝!

 

 

 

 

3. 본격적으로 Encoding을 해보자

 

매우 간단

앞에서 만들어놨던 거 그대로 대입하면 됨

 

 

NSData *JSONData = [NSJSONSerialization dataWithJSONObject:myDictionary options:NSJSONWritingPrettyPrinted error:&error];

 

 

만약 error가 nil이면 Encoding에 성공한 것!

성공했을 때, 제대로 만들어졌는지 String으로 찍어보면,

 

 

if(error == nil) {
    NSLog(@"jsonData = %@", [[NSString alloc] initWithData:JSONData encoding:NSUTF8StringEncoding]);
}

 

결과가 

 

 

짠!!!!!!

Objective-C로 Encoding 하기 성공~~~~~~~~

 

 

 

 

.

.

.

 

틀린 내용이나 피드백 환영 ~_~

썸넬이 없어서 투척



Calendar
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
최근 댓글
Visits
Today
Yesterday