투케이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");
    }
}
 

[결과 출력]

 

 

반응형
Comments