在网上看到一个例子,对JSON解析出来的数据处理的方法非常简单,而且通用,把我对它理解的思路写一下。
首先介绍下JSON解析,JSON解析出来的数据只有数组和对象两种结构。
objective - c中用字典来保存对象信息。key值对应对象名字,value值对应对象的值。在复杂的数据在ios中也是用数组和字典组成。
以下面的数据做例子
[{
"name" :"zhangSan",
"age":18,
"gender",true
},
{
"name" :"liSi",
"age":22,
"gender",false
}]
1.建立数据Model类,用来保存数据。对应自己所需要的数据,为其建立属性。
@property (nonatomic,retain)NSString *name;
@property (nonatomic,assign)int age;
@property (nonatomic,assign)BOOL gender;
2.重写init方法
-(id)initWithDictionary:(NSDictionary*)dataDic
{
if (self = [superinit]) {
[self setAttributes:dataDic];
}
return self;
}3.setAttributes方法用来执行属性的setter方法,为属性赋值
-(void)setAttributes:(NSDictionary *)dataDic
{
//得到属性名称和字段相对应的字典,key值为属性名字,value为JSON数据的字段
NSDictionary *attrDic = @{
@"name":@name,
@"age",@"age"
@"gender",@"gender"};
}
//得到字典值的枚举器
NSEnumerator *keyEnumertor = [attrDic keyEnumerator];
id attrName; //key值即为属性的名字
//遍历全部
while ((attrName = [keyEnumertor nextObject]))
{
//得到属性的setter方法
//属性名字取出首字符变为大写
NSString *upperCase = [[attrNamesubstringToIndex:1]uppercaseString];
//得到Setter方法名称(set+属性名首字母要大写+:)
NSString *attrSetterName = [NSStringstringWithFormat:@"set%@%@:",upperCase,[attrsubstringFromIndex:1]];
//得到属性的Setter方法
SEL sel = NSSelectorFromString(attrSetterName);
//是否响应该方法
if ([self respondsToSelector:sel])
{
//通过属性的名字取到字段名称
NSString *dataDicKey = [attrDicobjectForKey:attrName];
//字段名称取出所需数据
id attrContent = [dataDic objectForKey:dataDicKey];
//执行setter方法将值赋给属性
[selfperformSelectorOnMainThread:sel
withObject:attrContent
waitUntilDone:[NSThreadisMainThread]];
}
}
}
4.当得到数据的时候,初始化数据类的时候将数据传进来,可以自动将得到的数据赋值到相应的属性上面。-(void)LoadData
{
//获得数据data
//创建数据类使用重写的初始化方法
}