Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / iPhone开发之Json数据的解析

网络中数据的传输往往是以Json或XML格式进行的,如新浪微博、腾讯微博、人人网等。今天主要介绍一下ios下Json数据的解析。首先是使用TouchJson进行解析:TouchJson点击下载首先导入将Source文件加下的所以文件导入工程,在合适的位置添加CJSONDeserializer.h头文件。代码:
  1. NSString *jsonStr = <p class="p1">@"{"customer":[{"name":"roamer","ycount":"232.4","sumcount":"322.3"},{"name":"<span class="s1">王三</span>","ycount":"221.2","sumcount":"1123.2"},{"name":"<span class="s1">李四</span>","ycount":"1221.2","sumcount":"12123.2"}]}"<span class="s2">;</span></p>;  
  2.     NSData *jsonData = [jsonStr dataUsingEncoding:NSUTF8StringEncoding];  
  3.     NSError *error;  
  4.     NSMutableDictionary *root = [[CJSONDeserializer deserializer] deserialize:jsonData error:&error];  
  5.     NSLog(@"Customers:%@", root);  
  6.     NSMutableArray *customers = [root objectForKey:@"customer"];  
  7.     NSString *jsonTextStr = @"姓名: ";  
  8.     for (NSMutableDictionary *customer in customers) {  
  9.         NSString *name = [customer objectForKey:@"name"];  
  10.         name = [name stringByAppendingString:@" "];  
  11.         jsonTextStr = [jsonTextStr stringByAppendingString:name];  
  12.         NSLog(@"customer:%@",[customer objectForKey:@"name"]);  
  13.     }  
输出结果:
  1. Customers:{  
  2.     customer =     (  
  3.                 {  
  4.             name = roamer;  
  5.             sumcount = "322.3";  
  6.             ycount = "232.4";  
  7.         },  
  8.                 {  
  9.             name = "U738bU4e09";  
  10.             sumcount = "1123.2";  
  11.             ycount = "221.2";  
  12.         },  
  13.                 {  
  14.             name = "U674eU56db";  
  15.             sumcount = "12123.2";  
  16.             ycount = "1221.2";  
  17.         }  
  18.     );  
  19. }  
  20. 2012-06-15 14:08:20.406 TouchJsonTest[1495:f803] customer:roamer  
  21. 2012-06-15 14:08:20.406 TouchJsonTest[1495:f803] customer:王三  
  22. 2012-06-15 14:08:20.406 TouchJsonTest[1495:f803] customer:李四  
下面使用SBJson SBJson下载
首先导入将Classes文件加下的所以文件导入工程,在合适的位置添加SBJson.h头文件。代码:
  1. //解析数据   
  2.     SBJsonParser *parser = [[SBJsonParser alloc] init];  
  3.     NSString *jsonStr = <p class="p1">@"{"customer":[{"name":"roamer","ycount":"232.4","sumcount":"322.3"},{"name":"<span class="s1">王三</span>","ycount":"221.2","sumcount":"1123.2"},{"name":"<span class="s1">李四</span>","ycount":"1221.2","sumcount":"12123.2"}]}"<span class="s2">;</span></p>  
  4.     NSError *error = nil;  
  5.     NSMutableDictionary *root = [[NSMutableDictionary alloc] initWithDictionary:[parser objectWithString:jsonStr error:&error]];  
  6.     //转换代码 不然会带来中文问题,诸如加()、:变成 = 等乱码问题   
  7.     SBJsonWriter *jsonWrite = [[SBJsonWriter alloc] init];  
  8.     NSString *jsonString = [jsonWrite stringWithObject:root];  
  9.     NSLog(@"JsonString:%@", jsonString);  
  10.     [jsonWrite release];  
  11.     NSMutableArray *customers = [root objectForKey:@"customer"];  
  12.     NSLog(@"Customers:%@", customers);  
  13.       
  14.     for (NSMutableDictionary *customer in customers) {  
  15.         NSLog(@"Customer-name:%@", [customer objectForKey:@"name"]);  
  16.     }  
  17.     [self.jsonData setText:@"解析完成"];  
  18.     [self.parseBtn setTitle:@"Done" forState:UIControlStateNormal];  
使用TouchJson和SBJson都可以快速的完成Json数据的解析,两者使用起来都比较简单,但TouchJson性能更好一些推荐使用。