swift로 하는 방법은 여기저기 너무 많지만 저처럼 꼭 objc로 JSON파싱을 해야하는 경우.. ㅠㅠ
저는 이 JSON Parsing을 왜 사용하게 되었냐면, 아이디 찾기 기능을 구현하는 과정에서 일치하는 휴대폰번호에 해당하는 사용자의 정보를 서버에서 찾아 받아오는 과정에서 페이지에 나타난 json을 저장해서 일치하는 아이디를 찾아 화면에 나타내 주어야 하는 기능에서 사용하게 되었씁니당!
NSData *jsonData = [yourString dataUsingEncoding:NSUnicodeStringEncoding];
NSError *err = nil;
먼저, 위에 형태에서 바꿔주어야 하는 부분은 yourString이라고 적힌 부분인데,
yourString에는 제가 받아온 정보를 NSString형태로 저장한 jsonString이 저장되어 있습니다.
어떤 형태의 String이냐 하면.. -> [{"key":"value","key":"value",... }] 요런식으로 저장된 형태입니다!
이걸 그대로 NSData로 변환해줍니다!!
저는 궁금해서 jsonData를 NSLog로 찍어보았는데용,,

이렇게 뜨더라구요! 그냥 값이 나오면 잘 저장되어 있다고 생각하면 될 것 같아요!
id allKeys = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&err];
그 다음 이거를 allKeys라는 변수에 저장해줍니다!
여기서 저는 id타입으로 했지만 배열로 하고싶으면 NSArray, 딕셔너리 형태로 하고싶으면 NSDictionary로 적어주면 됩니당!
뒤에 options은 제가 적어준 kNilOptions나 0을 적어주면 기본값으로 설정됩니당! 이러면 끝이예요~~
여기서 저는 일치하는 아이디까지 찾아주어야 했기 때문에 추가적으로 설명해보자면..
for (int i=0; i<[allKeys count]; i++) {
NSDictionary *arrayResult = [allKeys objectAtIndex:i];
findID = [arrayResult objectForKey:@"user_id"];
}
위에 파싱한 정보를 반복문으로 돌면서 "user_id"와 일치하는 key를 찾아 value를 findID에 저장해서 찾아주었습니다.
두번째 줄에서 딕셔너리로 변경해주면 id -> dictionary로 해준 상태인데
이게 어떤 변하냐면 ({"key":"value"}) -> {"key":"value"} 이렇게 되네용!
저는 [allKeys count]의 값이 1이라 사실 반복문을 사용할 필요가 없었지만, 1이상인 경우에는 반복문을 사용해 주시면 됩니다!
'iOS > Objective-C' 카테고리의 다른 글
[iOS/Objective-C] expected identifier or '(’ 오류 (0) | 2022.02.10 |
---|---|
[iOS/Objective-C] Navigation Controller, Modal 형식에서 뷰 제거방법 (0) | 2022.02.10 |
[iOS/Objective-C] NSData와 NSString 형변환하기 (0) | 2022.02.03 |