iosにおけるJSONの解析


ios学習の良いサイトを見つけましたhttp://www.raywenderlich.comああ、いいチュートリアルがたくさんあります.この文章はその中の1篇の解析JSONの文章で改編されたものです.
知識点:
1.サイトjsonデータへのアクセス.
2.jsonデータの解析.
3.jsonデータの生成.
4.jsonとobjectを統合します.
jsonファイル:
{
"employees": [
{ "firstName":"  " , "lastName":"  " },
{ "firstName":"  " , "lastName":"  " },
{ "firstName":"   " , "lastName":"  " }
]
}

一、ウェブサイトjsonデータのアクセス.
定義マクロ:
#define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0)//1
#define kURL [NSURL URLWithString:@"http://localhost/employ.json"] //2
- (void)viewDidLoad
{
    [super viewDidLoad];
    
    dispatch_async(kBgQueue, ^{
        NSData* data = [NSData dataWithContentsOfURL:kURL];//    url    
        
        [self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES];//       fetchedData  
    });
}


二、jsonデータの解析
- (void)fetchedData:(NSData *)responseData {
    //parse out the json data
    NSError* error;
    NSDictionary* json = [NSJSONSerialization 
                          JSONObjectWithData:responseData //1                       
                          options:NSJSONReadingAllowFragments 
                          error:&error];
    
    NSArray* employees = [json objectForKey:@"employees"]; //2
    
    NSLog(@"employees: %@", employees); //3
    jsonText.text = [NSString stringWithFormat:@"employees:%@",employees];
    
    NSMutableString *str = [NSMutableString stringWithCapacity:40];
    for (NSDictionary *employee in employees) {
        NSLog(@"employee's first name is %@,last name is %@",[employee objectForKey:@"firstName"],[employee objectForKey:@"lastName"]);
        [str appendString:[NSString stringWithFormat:@"employee's first name is %@,last name is %@
",[employee objectForKey:@"firstName"],[employee objectForKey:@"lastName"]]]; NSLog(@"%@",str); } humanReadableText.text = str; }

図:ios中JSON的解析_第1张图片
三、jsonデータの生成
- (IBAction)toJSON:(id)sender {
    NSDictionary* postData = [NSDictionary dictionaryWithObjectsAndKeys:@"  ",@"firstName",@"  ", @"lastName", nil];
    NSDictionary* postData1 =[NSDictionary dictionaryWithObjectsAndKeys:@"   ", @"firstName", @"  ", @"lastName", nil];
    
    NSArray *array = [NSArray arrayWithObjects:postData, postData1, nil];
       
    NSLog(@"%@",[NSString stringWithFormat:@"%@",array]);
        humanReadableText.text = [NSString stringWithFormat:@"%@",array];
        [self performSelectorOnMainThread:@selector(generateJSON:) withObject:array waitUntilDone:YES];
}

- (void)generateJSON:(NSArray *)postDict {
    //parse out the json data
    NSError* error;
        
    NSData *postData = [NSJSONSerialization dataWithJSONObject:postDict options:NSJSONWritingPrettyPrinted error:&error];
    jsonText.text = [[NSString alloc] initWithData:postData encoding:NSUTF8StringEncoding];
}
図:
ios中JSON的解析_第2张图片
四、jsonとobjectの統合
@interface NSDictionary(JSONCategories)
+(NSDictionary*)dictionaryWithContentsOfJSONURLString:
  (NSString*)urlAddress;
-(NSData*)toJSON;
@end
 
@implementation NSDictionary(JSONCategories)
+(NSDictionary*)dictionaryWithContentsOfJSONURLString:
  (NSString*)urlAddress
{
    NSData* data = [NSData dataWithContentsOfURL:
      [NSURL URLWithString: urlAddress] ];
    __autoreleasing NSError* error = nil;
    id result = [NSJSONSerialization JSONObjectWithData:data 
      options:kNilOptions error:&error];
    if (error != nil) return nil;
    return result;
}
 
-(NSData*)toJSON
{
    NSError* error = nil;
    id result = [NSJSONSerialization dataWithJSONObject:self 
      options:kNilOptions error:&error];
    if (error != nil) return nil;
    return result;    
}
@end