发现了一个ios学习的好网站,http://www.raywenderlich.com,很多很好的教程。这篇是用其中的一篇解析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 %@\n",[employee objectForKey:@"firstName"],[employee objectForKey:@"lastName"]]];
NSLog(@"%@",str);
}
humanReadableText.text = str;
}
如图:
三、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];
}
四、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