Objective-C 操作JSON 主要使用的是 NSJSONSerialization 这个类
NSJSONSerialization 包含了以下五个类函数
+ (BOOL)isValidJSONObject:(id)obj;
判断 该实例(obj)是否为JSONObject
需满足下面三个条件
1.obj 是NSArray 或 NSDictionay 以及他们派生出来的子类
2.obj 包含的所有对象是NSString,NSNumber,NSArray,NSDictionary 或NSNull
3.NSNumber的对象不能是NaN或无穷大
+ (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;
将JSONObject的实例转成NSData
+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;
将NSData类型的实例转成JSONObject
+ (NSInteger)writeJSONObject:(id)obj toStream:(NSOutputStream *)stream options:(NSJSONWritingOptions)opt error:(NSError **)error;
将一个JSONObject的实例写入到一个输出流中 返回写入的长度
+ (id)JSONObjectWithStream:(NSInputStream *)stream options:(NSJSONReadingOptions)opt error:(NSError **)error;
从输入流中读取成JSONObject 并返回
代码演示:
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc]init]; [dictionary setValue:@"xiaominfc" forKey:@"username"]; [dictionary setValue:@"1991-03-26" forKey:@"birthday"]; [dictionary setValue:[NSNumber numberWithInteger:23] forKey:@"age"]; NSArray *arrayOfAnthonysChildren = [[NSArray alloc]initWithObjects:@"Java",@"Objective-C",@"Python",@"C++", nil]; [dictionary setValue:arrayOfAnthonysChildren forKey:@"program_language"]; if([NSJSONSerialization isValidJSONObject:dictionary]){ NSLog(@"it is a JSONObject!"); } //use dataWithJSONObject fun NSError *error = nil; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:NSJSONWritingPrettyPrinted error:&error]; if([jsonData length] > 0 && error == nil) { NSString *jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding]; NSLog(@"data:%@",jsonString); } //use JSONObjectWithData fun NSString *jsonDataString = @"{\"username\":\"xiaominfc\",\"city\":\"深圳\"}"; NSData *data = [jsonDataString dataUsingEncoding:NSUTF8StringEncoding]; id jsonObject = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error]; if ([jsonObject isKindOfClass:[NSDictionary class]]) { NSDictionary *jsonDictionary = (NSDictionary*)jsonObject; NSLog(@"username:%@ And city:%@",[jsonDictionary valueForKey:@"username"],[jsonDictionary valueForKey:@"city"]); } //use writeJSONObject fun NSString *filePath = @"/Users/xiaominfc/text.txt"; NSOutputStream *outStream = [[NSOutputStream alloc]initToFileAtPath:filePath append:NO]; [outStream open]; NSInteger length = [NSJSONSerialization writeJSONObject:dictionary toStream:outStream options:NSJSONWritingPrettyPrinted error:&error]; NSLog(@"write %ld bytes",(long)length); [outStream close]; //use JSONObjectWithStream NSInputStream *inStream = [[NSInputStream alloc]initWithFileAtPath:filePath]; [inStream open]; id streamObject = [NSJSONSerialization JSONObjectWithStream:inStream options:NSJSONReadingAllowFragments error:&error]; if ([streamObject isKindOfClass:[NSDictionary class]]) { NSDictionary *jsonDictionary = (NSDictionary*)streamObject; NSNumber *ageNumber = (NSNumber*)[jsonDictionary valueForKey:@"age"]; NSLog(@"username:%@ And age:%d",[jsonDictionary valueForKey:@"username"],[ageNumber intValue]); } [inStream close];