Notice
Recent Posts
Recent Comments
Link
투케이2K
12. (Objective-C/objc) 딕셔너리 사용해 json 생성 및 파싱 수행 실시 - NSMutableDictionary , NSJSONSerialization 본문
Objective-C
12. (Objective-C/objc) 딕셔너리 사용해 json 생성 및 파싱 수행 실시 - NSMutableDictionary , NSJSONSerialization
투케이2K 2022. 2. 22. 14:04[개발 환경 설정]
개발 툴 : XCODE
개발 언어 : OBJECTIVE-C
[testMain 함수]
// MARK: - [헤더 파일에 정의 없이 : void 메소드 구현]
- (void)testMain {
printf("\n");
printf("=============================== \n");
printf("[ViewController >> testMain() :: 테스트 메소드 수행] \n");
printf("=============================== \n");
printf("\n");
// [초기 인풋 배열, 딕셔너리 데이터 선언 실시]
NSMutableArray *mutableArray = [[NSMutableArray alloc] init];
[mutableArray addObject:@"하나"];
[mutableArray addObject:@"둘"];
NSMutableDictionary *mutableDic = [[NSMutableDictionary alloc] init];
[mutableDic setObject:@"투케이" forKey:@"name"];
[mutableDic setObject:@29 forKey:@"age"];
// [json 생성 딕셔너리 선언 실시]
NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
[dic setObject:@"value_1" forKey:@"key_1"];
[dic setObject:@10 forKey:@"key_2"];
[dic setObject:@true forKey:@"key_3"];
[dic setObject:mutableArray forKey:@"key_4"];
[dic setObject:mutableDic forKey:@"key_5"];
// [json 형식 문자열을 저장할 변수 선언 실시]
NSString *jsonData = @"";
// [try catch finally 구문 선언 실시]
@try {
printf("\n");
printf("=============================== \n");
printf("[dic to json [구문 시작]] \n");
printf("=============================== \n");
printf("\n");
// [딕셔너리 >> json 데이터 포맷 수행 실시]
NSData *dicData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:nil];
jsonData = [[NSString alloc] initWithData:dicData encoding:NSUTF8StringEncoding];
printf("\n");
printf("=============================== \n");
printf("[dic to json [데이터 포맷] : %s] \n", jsonData.description.UTF8String);
printf("=============================== \n");
printf("\n");
printf("\n");
printf("=============================== \n");
printf("[json to dic [구문 시작]] \n");
printf("=============================== \n");
printf("\n");
// [json >> 딕셔너리 데이터 포맷 수행 실시]
NSData *parseData = [jsonData dataUsingEncoding:NSUTF8StringEncoding];
NSMutableDictionary *parseDic = [NSJSONSerialization JSONObjectWithData:parseData options:nil error:nil];
// [for 문을 수행해서 json >> 딕셔너리로 변환한 데이터 출력 실시]
for (NSString *keyData in parseDic.allKeys){
// [value 데이터 확인 실시]
NSObject *obj = [parseDic objectForKey:keyData];
// [value 데이터 타입 확인 실시]
NSString *checkType = [NSString stringWithFormat:@"%@" , [obj class]];
checkType = checkType.lowercaseString; // 소문자 변환
// [타입 별 value 데이터 출력 실시]
int plusJson = 0; // 배열, 딕셔너리 데이터 세부 json 재포맷 여부
if ([checkType rangeOfString:@"array"].location == NSNotFound){
if ([checkType rangeOfString:@"dictionary"].location == NSNotFound){ // MARK: [일반 형식]
// [데이터 삽입]
plusJson = 0;
}
else { // MARK: [딕셔너리 형식]
// [데이터 삽입]
plusJson = 1;
}
}
else { // MARK: [배열 형식]
// [데이터 삽입]
plusJson = 2;
}
// [세부 json 형식 포맷 여부 확인]
if (plusJson == 1){ // 딕셔너리 세부 json 포맷
NSMutableDictionary *copyDic = [NSMutableDictionary dictionaryWithDictionary : obj];
NSData *copyDicData = [NSJSONSerialization dataWithJSONObject:copyDic options:NSJSONWritingPrettyPrinted error:nil];
NSString *copyDicJson = [[NSString alloc] initWithData:copyDicData encoding:NSUTF8StringEncoding];
printf("\n");
printf("=============================== \n");
printf("[dic for [key] :: %s] \n", keyData.description.UTF8String);
printf("[dic for [value] [type] :: %s] \n", checkType.description.UTF8String);
printf("[dic for [value] [data] :: %s] \n", copyDicJson.description.UTF8String);
printf("=============================== \n");
printf("\n");
}
else if (plusJson == 2){ // 배열 세부 json 포맷
NSMutableArray *copyArray = [NSMutableArray arrayWithObject:obj];
NSData *arrayData = [NSJSONSerialization dataWithJSONObject:copyArray options:NSJSONWritingPrettyPrinted error:nil];
NSString *arrayJson = [[NSString alloc] initWithData:arrayData encoding:NSUTF8StringEncoding];
printf("\n");
printf("=============================== \n");
printf("[dic for [key] :: %s] \n", keyData.description.UTF8String);
printf("[dic for [value] [type] :: %s] \n", checkType.description.UTF8String);
printf("[dic for [value] [data] :: %s] \n", arrayJson.description.UTF8String);
printf("=============================== \n");
printf("\n");
}
else { // 일반 출력
NSString *valueData = [NSString stringWithFormat:@"%@" , parseDic[keyData]];
printf("\n");
printf("=============================== \n");
printf("[dic for [key] :: %s] \n", keyData.description.UTF8String);
printf("[dic for [value] [type] :: %s] \n", checkType.description.UTF8String);
printf("[dic for [value] [data] :: %s] \n", valueData.description.UTF8String);
printf("=============================== \n");
printf("\n");
}
}
} @catch (NSException *exception) {
printf("\n");
printf("=============================== \n");
printf("[catch [name] :: %s] \n", exception.name.description.UTF8String);
printf("[catch [reason] :: %s] \n", exception.reason.description.UTF8String);
printf("=============================== \n");
printf("\n");
}
}
[결과 출력]
반응형
'Objective-C' 카테고리의 다른 글
Comments