IOS 에서 JSon 해석 실례 방법 상세 설명(네 가지 방법)

json 은 경량급 데이터 교환 형식 으로서 xml 를 점차 대체 하여 네트워크 데이터 의 통용 형식 이 되 고 있다.
"제 이 슨 코드 형식 이 혼 란 스 러 워 서 사용 할 수 있 습 니 다."http://www.bejson.com/'사이트 에서 JSON 포맷 검 사 를 실시 합 니 다(링크 를 열 려 면 클릭).이 사 이 트 는 제 이 슨 코드 의 오 류 를 감지 할 수 있 을 뿐만 아니 라 제 이 슨 의 데이터 내용 을 보기 로 표시 할 수 있어 편리 하 다.
IOS 5 부터 애플 은 제 이 슨 에 대한 네 이 티 브 지원(NSJSONserialization)을 제 공 했 지만,이전 iOS 버 전 을 호 환 하기 위해 제3자 라 이브 러 리 를 사용 해 제 이 슨 을 해석 할 수 있다.
본 고 는 터치 제 이 슨,SBJSon,JSONkit,iOS 5 가 지원 하 는 원생 제 이 슨 방법 을 소개 하고 국가 기상 국 API,터치 제 이 슨,SBJSon 을 분석 하려 면 그들의 라 이브 러 리 를 다운로드 해 야 한다.
TouchJSon 패키지 다운로드:http://xiazai.jb51.net/201612/yuanma/TouchJson(jb51.net)
SBJSon 패키지 다운로드:http://xiazai.jb51.net/201612/yuanma/SBJson(jb51.net)
JSONKIT 패키지 다운로드:http://xiazai.jb51.net/201612/yuanma/JSONKit(jb51.net)
아래 의 전체 프로그램 원본 패키지 다운로드:http://xiazai.jb51.net/201612/yuanma/SBJsonwz(jb51.net)
PS:
국가 기상 국 이 제공 한 일기예보 인터페이스
인터페이스 주 소 는 세 가지 가 있 습 니 다.
http://www.weather.com.cn/data/sk/101010100.html
http://www.weather.com.cn/data/cityinfo/101010100.html
http://m.weather.com.cn/data/101010100.html
세 번 째 인터페이스 정 보 는 비교적 상세 하고 6 일의 날 씨 를 제공 합 니 다.API 가 돌아 오 는 정 보 는 무료 일기예보 인터페이스 API 및 전국 모든 지역 코드 오픈!국립 기상 청 제공) 을 참조 하 십시오.전국 각 도시 가 이 id 번호 에 대응 하고 id 가 좋 으 면 각 도시 가 날씨 에 대응 하 는 것 을 분석 할 수 있 습 니 다.
JSON 을 해석 하 는 네 가지 방법 을 소개 한다.
먼저 새로운 프로젝트 를 만 듭 니 다.(ARC 메커니즘 을 선택 하지 않도록 주의 하 십시오)다음 컨트롤 을 추가 합 니 다.

위의 그림 과 같다.다음 전시 프로그램 코드:
파일 ViewController.h 중:

#import <UIKit/UIKit.h> 
@interface ViewController : UIViewController 
@property (retain, nonatomic) IBOutlet UITextView *txtView; 
- (IBAction)btnPressTouchJson:(id)sender; 
- (IBAction)btnPressSBJson:(id)sender; 
- (IBAction)btnPressIOS5Json:(id)sender; 
- (IBAction)btnPressJsonKit:(id)sender; 
@end 
파일 ViewController.m 의 주요 코드:
(1)TouchJSon 해석 방법 사용:(가방 가 져 오기:\#import"TouchJSon/JSON/CJSONdeserializer.h")

//  TouchJson         
- (IBAction)btnPressTouchJson:(id)sender { 
//  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); 
//     
txtView.text = [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        
- (IBAction)btnPressSBJson:(id)sender { 
NSURL *url = [NSURL URLWithString:@"http://m.weather.com.cn/data/101180701.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"]; 
txtView.text = [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 지원 하지 않 음)

- (IBAction)btnPressIOS5Json:(id)sender { 
NSError *error; 
//    NSURL   
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://m.weather.com.cn/data/101180601.html"]]; 
//    url    NSData    
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
//IOS5     NSJSONSerialization response            
NSDictionary *weatherDic = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableLeaves error:&error]; 
NSDictionary *weatherInfo = [weatherDic objectForKey:@"weatherinfo"]; 
txtView.text = [NSString stringWithFormat:@"    %@ %@ %@       :%@ %@ ",[weatherInfo objectForKey:@"date_y"],[weatherInfo objectForKey:@"week"],[weatherInfo objectForKey:@"city"], [weatherInfo objectForKey:@"weather1"], [weatherInfo objectForKey:@"temp1"]]; 
NSLog(@"weatherInfo        --》%@", weatherDic ); 
} 
(4)JSONkit 해석 방법 사용:(가방 가 져 오기:\#import"JSONkit/JSONkit.h")

- (IBAction)btnPressJsonKit:(id)sender { 
//  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"]); 
[json1 release]; 
//  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"]); 
[json2 release]; 
} 
또한 iOS 5 에 JSON 이 분석 한 API 가 추가 되 었 기 때문에 우 리 는 이 를 다른 5 개의 오픈 소스 JSON 분석 라 이브 러 리 와 분석 속 도 를 테스트 했 습 니 다.다음은 테스트 결과 입 니 다.
저희 가 선택 한 테스트 대상 은 다음 과 같은 프레임 워 크 를 포함 합 니 다.그 중에서 NSJSONserialization 은 iOS 5 시스템 에 추 가 된 JSON 분석 API 입 니 다.iOS 5 환경 이 필요 합 니 다.더 낮은 버 전에 서 테스트 를 하려 면 해당 코드 호출 을 차단 해 야 합 니 다.

- [SBJSON (json-framework)](http://code.google.com/p/json-framework/)
- [TouchJSON (from touchcode)](http://code.google.com/p/touchcode/)
- [YAJL (objective-C bindings)](http://github.com/gabriel/yajl-objc)
- [JSONKit](https://github.com/johnezang/JSONKit)
- [NextiveJson](https://github.com/nextive/NextiveJson) 
-[NSJSONSerialization](http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSJSONSerialization_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40010946)
우 리 는 json 형식의 데 이 터 를 포함 하 는 네 개의 파일 을 선택 하여 테스트 를 진행 했다.각 파일 마다 100 개의 분석 동작 을 하여 분석 시간 을 비교 합 니 다.
.....
테스트 결과 에 따 르 면 시스템 의 API 분석 속도 가 가장 빠 르 고 우 리 는 프로젝트 에서 선택 하여 사용 하 는 것 도 비교적 광범 위 한 SBJSON 의 분석 속도 가 꼴찌 에서 두 번 째 로 떨 어 지 는 것 으로 나 를 크게 놀 라 게 했다.
시스템 API 와 가 까 운 것 은 JSONkit 일 것 이다.
API 의 열 린 인터페이스 와 사용 방식 을 비교 하지 않 았 습 니 다.만약 에 상기 분석 속 도 를 바탕 으로 하 는 테스트 라면:
1:iOS 5 는 시스템 의 API 를 선택 하여 진행 해 야 합 니 다.
2:시스템 API 를 사용 할 수 없 는 사람 은 JSONkit 를 선택해 야 합 니 다.
위 에서 말 한 것 은 편집장 이 여러분 에 게 소개 한 IOS 에서 JSon 이 실례 를 해석 하 는 방법 에 대한 상세 한 설명(네 가지 방법)의 모든 서술 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.만약 에 궁금 한 점 이 있 으 면 저 에 게 메 시 지 를 남 겨 주세요.편집장 은 제때에 여러분 에 게 답 할 것 입 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기