iOS 개발 JSON 형식 데이터 생 성 및 분석

15513 단어
본 고 는 네 가지 측면 에서 IOS 개발 에서 JSON 형식 데이터 의 생 성과 해석 에 대해 설명 할 것 이다.
 
1. JSON 은 무엇 입 니까?
2. 우 리 는 왜 JSON 형식의 데 이 터 를 사용 해 야 합 니까?
3. JSON 형식의 데 이 터 를 어떻게 생 성 합 니까?
4. JSON 형식의 데 이 터 를 어떻게 해석 합 니까?
   JSON 형식 이 xml 를 대체 하여 네트워크 전송 에 큰 편 의 를 가 져 왔 지만 xml 의 일목요연 함 이 없 었 다. 특히 json 데이터 가 길 때 우 리 는 번 거 롭 고 복잡 한 데이터 노드 검색 에 빠 질 것 이다.이때 우 리 는 온라인 검사 도구 인 BeJSon 이 필요 하 다. 
 
1. JSON 은 무엇 입 니까?
JSON (JavaScript Object Notation) 은 경량급 데이터 교환 형식 이다.그것 은 ECMAScript 의 하위 집합 을 기반 으로 합 니 다.JSON 은 언어 에 완전히 독립 된 텍스트 형식 을 사용 하지만 C 언어 가족 과 유사 한 습관 (C, C + +, C \ #, Java, JavaScript, Perl, Python 등 포함) 도 사용 했다.이러한 특성 들 은 JSON 을 이상 적 인 데이터 교환 언어 로 만 들 었 다.사람 이 읽 고 쓰기 쉬 우 며 기계 적 으로 해석 하고 생 성 하기 도 쉽다 (일반적으로 네트워크 전송 속 도 를 높이 는 데 쓰 인 다).
JSON 데 이 터 는 주로 두 가지 데이터 구조 가 있 는데 하 나 는 키 / 값 이 고 다른 하 나 는 배열 의 형식 으로 표시 된다.
1. JSON 데이터 의 쓰기 형식 은 이름 / 값 이 맞습니다.예:
{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"}

 
2. JSON 데이터 의 쓰기 형식 은 배열 형식 으로 한 조 의 값 을 표시 해 야 할 때 JSON 은 가 독성 을 높 일 뿐만 아니 라 복잡성 도 줄 일 수 있다.예:
{
    "programmers": [{
        "firstName": "Brett",
        "lastName": "McLaughlin",
        "email": "aaaa"
    }, {
        "firstName": "Elliotte",
        "lastName": "Harold",
        "email": "cccc"
    }],
    "authors": [{
        "firstName": "Isaac",
        "lastName": "Asimov",
        "genre": "sciencefiction"
    }, {
        "firstName": "Frank",
        "lastName": "Peretti",
        "genre": "christianfiction"
    }],
    "musicians": [{
        "firstName": "Eric",
        "lastName": "Clapton",
        "instrument": "guitar"
    }, {
        "firstName": "Sergei",
        "lastName": "Rachmaninoff",
        "instrument": "piano"
    }]
}

 
 
 
2. 우 리 는 왜 JSON 형식의 데 이 터 를 사용 해 야 합 니까?
JSON 은 JavaScript 대상 에 표 시 된 데 이 터 를 문자열 로 변환 한 다음 함수 간 에 이 문자열 을 쉽게 전달 하거나 비동기 응용 프로그램 에서 웹 클 라 이언 트 에서 서버 엔 드 프로그램 에 문자열 을 전달 할 수 있 습 니 다.이 문자열 은 좀 이상해 보이 지만 자 바스 크 립 트 는 쉽게 설명 할 수 있 으 며 JSON 은 '이름 / 값 쌍' 보다 더 복잡 한 구 조 를 나 타 낼 수 있다.예 를 들 어 키 와 값 의 간단 한 목록 뿐만 아니 라 배열 과 복잡 한 대상 을 나 타 낼 수 있다.
JSON 은 패 킷 형식 으로 전송 할 때 더욱 효율 적 입 니 다. 이것 은 JSON 이 XML 처럼 엄격 한 닫 힌 태그 가 필요 하지 않 기 때문에 효과 적 인 데 이 터 량 이 전체 패 킷 보다 크게 향상 되 고 똑 같은 데이터 트 래 픽 을 줄 이 는 상황 에서 네트워크 의 전송 압력 을 줄 일 수 있 습 니 다.
 
 3. JSON 형식의 데 이 터 를 어떻게 생 성 합 니까?
1. 사전 NSDictionary 를 이용 하여 키 / 값 형식의 데이터 로 변환 합 니 다.
//               NSString, NSNumber, NSArray, NSDictionary, or NSNull        ,           .        JSON   .
    NSDictionary *dict = @{@"name" : @"me", @"do" : @"something", @"with" : @"her", @"address" : @"home"};
    
    // 1.             JSON  .
    // YES if obj can be converted to JSON data, otherwise NO
    BOOL isYes = [NSJSONSerialization isValidJSONObject:dict];
    
    if (isYes) {
        NSLog(@"    ");
        
        /* JSON data for obj, or nil if an internal error occurs. The resulting data is a encoded in UTF-8.
         */
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:NULL];
        
        /*
         Writes the bytes in the receiver to the file specified by a given path.
         YES if the operation succeeds, otherwise NO
         */
        //  JSON      
        //        :            .
        //   : AFN               !       ,       !           .
        [jsonData writeToFile:@"/Users/SunnyBoy/Sites/JSON_XML/dict.json" atomically:YES];
        
        NSLog(@"%@", [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]);
        
    } else {
        
        NSLog(@"JSON      ,       ");
        
    }

 
 2. JSON 직렬 화 를 통 해 배열 을 변환 할 수 있 지만 변환 결 과 는 표준 화 된 JSON 형식 이 아 닙 니 다.
   NSArray *array = @[@"qn", @18, @"ya", @"wj"];
    
    BOOL isYes = [NSJSONSerialization isValidJSONObject:array];
    
    if (isYes) {
        NSLog(@"    ");
        
        NSData *data = [NSJSONSerialization dataWithJSONObject:array options:0 error:NULL];
        
        [data writeToFile:@"/Users/SunnyBoy/Sites/JSON_XML/base" atomically:YES];
    
    } else {
        
        NSLog(@"JSON      ,       ");
        
    }

 
 
4. JSON 형식의 데 이 터 를 어떻게 해석 합 니까?
1. TouchJSon 해석 방법 사용: (가방 가 져 오기: \ # import "TouchJSon / JSON / CJSONdeserializer. h")
//  TouchJson        
//  API  
NSURL *url = [NSURL URLWithString:@"http://m.weather.com.cn/data/101010100.html"];

//    NSError  ,        
NSError *error;
NSString *jsonString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];

NSLog(@"jsonString--->%@",jsonString);

//             ,     UTF8,           
NSDictionary *rootDic = [[CJSONDeserializer deserializer] deserialize:[jsonString dataUsingEncoding:NSUTF8StringEncoding] error:&error];

//     Json     ,            
NSDictionary *weatherInfo = [rootDic objectForKey:@"weatherinfo"];
NSLog(@"weatherInfo--->%@",weatherInfo);

//    
NSLog(@"%@",[NSString stringWithFormat:@"    %@  %@  %@        :%@  %@ ",[weatherInfo objectForKey:@"date_y"],[weatherInfo objectForKey:@"week"],[weatherInfo objectForKey:@"city"], [weatherInfo objectForKey:@"weather1"], [weatherInfo objectForKey:@"temp1"]]);

 
 2. SBJSon 해석 방법 사용: (가방 가 져 오기: \ # import "SBJSon / SBJSon. h")
//  SBJson       
NSURL *url = [NSURL URLWithString:@"http://www.weather.com.cn/adat/sk/101010100.html"];

NSError *error = nil;

NSString *jsonString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];

SBJsonParser *parser = [[SBJsonParser alloc] init];

NSDictionary *rootDic = [parser objectWithString:jsonString error:&error];

NSDictionary *weatherInfo = [rootDic objectForKey:@"weatherinfo"];

NSLog(@"%@", [NSString stringWithFormat:@"    %@  %@  %@        :%@  %@ ",[weatherInfo objectForKey:@"date_y"],[weatherInfo objectForKey:@"week"],[weatherInfo objectForKey:@"city"], [weatherInfo objectForKey:@"weather1"], [weatherInfo objectForKey:@"temp1"]]);

  
3. IOS 5 자체 분석 클래스 NSJSONserialization 방법 으로 분석: (가방 가 져 올 필요 없 음, IOS 5 지원, 저 버 전 IOS 지원 하지 않 음)
//             
    NSURL *url = [ NSURL URLWithString:@"http://www.weather.com.cn/adat/sk/101010100.html"];
    
    //     
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    [[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        
        //        Block    ,       .
        //       :       !
        
        //           :
        if (data && !error) {
            
            // JSON       ,IOS5      NSJSONSerialization response           
            id obj = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
            
            NSDictionary *dict = obj[@"weatherinfo"];
            
            NSLog(@"%@---%@", dict, dict[@"city"]);
        }
        
    }] resume];

 
4. JSONkit 해석 방법 사용: (가방 가 져 오기: \ # import "JSONkit / JSONkit. h")
//  json “  ” , value     、  ,    objectFromJSONString
NSString *json1 = @"{\"a\":123, \"b\":\"abc\"}";
NSLog(@"json1:%@",json1);

NSDictionary *data1 = [json1 objectFromJSONString];
NSLog(@"json1.a:%@",[data1 objectForKey:@"a"]);
NSLog(@"json1.b:%@",[data1 objectForKey:@"b"]);

//  json   , value  array、object,     objectFromJSONString,       (      :         php/json_encode   json    ,   NSString   json    ,    ),    objectFromJSONStringWithParseOptions:
NSString *json2 = @"{\"a\":123, \"b\":\"abc\", \"c\":[456, \"hello\"], \"d\":{\"name\":\"  \", \"age\":\"32\"}}";
NSLog(@"json2:%@", json2);

NSDictionary *data2 = [json2 objectFromJSONStringWithParseOptions:JKParseOptionLooseUnicode];
NSLog(@"json2.c:%@", [data2 objectForKey:@"c"]);
NSLog(@"json2.d:%@", [data2 objectForKey:@"d"]);

 
 
우호 알림:
4 에서 해석 방식 의 비교:
시스템 의 API 해석 속도 가 가장 빠르다.
SBJSON 의 해석 속 도 는 꼴찌 에서 두 번 째 로 떨 어 졌 다.
시스템 API 와 가 까 운 것 은 JSONkit 이다.
향후 개발 과정 에서 JSON 데 이 터 를 분석 하기 위해 시스템 의 API 나 JSONkit 을 사용 하 는 것 을 권장 합 니 다.
 
만약 본문 에 잘못된 점 이 있다 면 벽돌 을 치 며 지적 하고 당신 과 함께 격려 하 는 것 을 환영 합 니 다. 감사합니다!

좋은 웹페이지 즐겨찾기