Objective-C JSON操作

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];

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值