Objective-C
操作JSON 主要使用的是
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:NSJSONWritingPrettyPrint ed 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:NSJSONReadingMutableCont ainers 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:NSJSONWritingPrettyPrint ed 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:NSJSONReadingAllowFragme nts 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];