iOS中将后台JSON数据转化为模型的坑
再拿到了Json数据后怎么把字典写到数组里面去呢?
方法1:用最原始的方法
-(instancetype)initWithDict:(NSDictionary *)dict {
if(self = [super init]) {
[self setValuesForKeysWithDictionary:dict];
}
return self;
}
+(instancetype)modelWithDict:(NSDictionary *)dict {
return [[self alloc] initWithDict:dict];
}
//这个方法一定要写上 ,不然就回报警告的,什么警告呢? undefiedforKey
- (void)setValue:(id)value forUndefinedKey:(NSString *)key
{
}
这行代码的作用就是为了避免在你的json'数据的字典在很多个的情况下 然后呢你的.h文件里面可能只有几个字段 而并没有吧json数据里面的全部字段用上的时候这个时候这个就起作用了,这行代码的就可以把多余的字段因为没有一一的键值对应给忽略了
比如这个时候json数据的层级结构是这样的
{"result": true, "page": 1, "totalPage": 1, "dicMap": {
}, "varList": [
{
}, {
} ] }
然后你可以这样
1.在iOS中后台解析出来的数据带有小括号() 他就是表示的[]他就是表示数组和正常的解析是一样的
[manager GET:@"" parameters:params success:^(NSURLSessionDataTask * _Nonnull task, id _Nonnull responseObject) {
//拿到的2进制数据
// NSLog(@"object %@",responseObject);
// [responseObject handlerJSONData:responseObject];
// NSLog(@"=====%@======", responseObject);
// NSString *dict = [[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:0 error:NULL];
NSArray *data = dict[@"varList"];
// self.guessModel = [self.guessModel initWithString:dict usingEncoding:NSUTF8StringEncoding error:nil];
// self.guessModel = [self.guessModel initWithDictionary:dict error:NULL];
// NSLog(@"-------------%@------------------",data);
for (NSDictionary *dict1 in data) {
ZYGuess *guess = [ZYGuess modelWithDict:dict1] ;
NSLog(@"====%@========", guess);
}
// NSLog(@"-------------%@------------------",self.guessModel);
// ZYGuess *guess = [[ZYGuess alloc] initWithDictionary:dict[@"varList"] error:nil];
// ZYGuess *guess = [[ZYGuess alloc] initWithString:dict usingEncoding:NSUTF8StringEncoding error:nil];
// NSLog(@"vvvvvv-----%@--VVVVVVV",self.guessModel);
// NSLog(@"guess : %@",guess);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"%@",error);
}];
}