ios中JSON的解析

时间:2022-03-06 15:35:24

发现了一个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;
}

如图:
ios中JSON的解析


三、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的解析

四、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