在iOS开发中Json数据是我们再熟悉不过的数据格式了,这篇文章主要讲述的是Json数据与模型对象之间的相互转换关系。
第一种:模型对象转Json数据格式。
首先我们讲一下模型对象如何转换成Json数据,这个用的不是太频繁,但是当我们需要将Json数据上传到服务器的时候,我们就需要将我们的模型对象转换成Json数据了。其实说起来也挺简单的,主要是注意转json的对象是数组或字典,不可以是自定义的对象。
创建model类:
代码:
/** 模型转Json */
- (void)modelTranstoJson{
//Model -> NSDictionary -> Json
BXMovieModel *videoModel = [[BXMovieModel alloc]init];
videoModel.name = @"菊花侠大战桃花怪";
videoModel.videoId = @"1";
videoModel.videoURL = @"http://blog.sina.com.cn/marsliudev";
videoModel.imageURL = @"http://blog.sina.com.cn/marsliudev";
//模型 转 字典
NSArray *array = @[videoModel];
NSDictionary *dic = [videoModel dictionaryWithValuesForKeys:@[@"name",@"videoId",@"videoURL",@"imageURL"]];
NSLog(@"+++++++++++++%@",dic);
//要求转json的对象 是数组或字典 不可以是自定义的对象
NSData *data = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:nil];
NSString *tempStr = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"--------%@",tempStr);
}
第二种:从网络获取Json数据进行解析,字典转模型。
代码:
viewController.m内代码:
主要就是请求 json数据
BXToolManager *manager = [[BXToolManager alloc]init];
[manager sendRequestWithUrl:@"http://api2.juheapi.com/jztk/query?subject=1&model=c1&key=f9a989c45f5f63da75360b7e86004842&testType=order"];
_dataArrayM = [[BXToolManager getTestArray] mutableCopy];
BXToolManager.m中代码:
- (void)sendRequestWithUrl:(NSString *)urlstr{
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSURL *url = [NSURL URLWithString:urlstr];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (!error) {
dispatch_async(dispatch_get_main_queue(), ^{
NSDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSArray *dataArray = dataDic[@"result"];
[[NSUserDefaults standardUserDefaults]setObject:dataArray forKey:@"dic"];
});
}else{
NSLog(@"%@",error.userInfo);
}
}];
[dataTask resume];
});
}
+(NSArray *)getTestArray{
NSMutableArray *muArray=[NSMutableArray array];
NSArray *array=[[NSUserDefaults standardUserDefaults]objectForKey:@"dic"];
for (NSDictionary *dic in array) {
[muArray addObject:[BXJsonModel initWithDictionary:dic]];
}
return muArray;
}
BXJsonModel.m中代码:
-(instancetype)initWithDictionaty:(NSDictionary *)dic
{
if (self=[super init]) {
self.answer=dic[@"answer"];
self.explains=dic[@"explains"];
self.item1=dic[@"item1"];
self.item2=dic[@"item2"];
self.item3=dic[@"item3"];
self.item4=dic[@"item4"];
self.question=dic[@"question"];
self.url=dic[@"url"];
}
return self;
}
+(instancetype)initWithDictionary:(NSDictionary *)dic
{
return [[BXJsonModel alloc]initWithDictionaty:dic];
}
既然你能够看到这里,再说个当时在请求json数据时遇到的事情,一开始我写json数据网络请求的时候,实用的是下面的代码,也能够成功的请求到数据,可是后来想想这个方法还是最好别用,如果请求的API不适公共资源,将会获取不到数据。
/*
* 这种方法也可以获取到数据 ,只不过获取到的数据资源是公共资源,如果资源收到限制的API将无法请求到资源
*
*/
- (void)sendRequestWithUrl:(NSString *)urlstr
{
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSURL *url = [NSURL URLWithString:urlstr];
NSData *data = [NSData dataWithContentsOfURL:url];
dispatch_async(dispatch_get_main_queue(), ^{
NSDictionary *dataDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSArray *dataArray = dataDic[@"result"];
[[NSUserDefaults standardUserDefaults]setObject:dataArray forKey:@"dic"];
});
});
}
好了,就写这么多,不吹牛逼了,继续敲代码。喜欢的点一波关注 。不懂得可以发邮件给我mars_liu_dev@163.com。