iOS開發中對JSON解析資料的處理
在網上看到一個例子,對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];
}
returnself;
}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
//建立資料類使用重寫的初始化方法
}
注:本篇部落格是我自己自己的一些理解,可能會有不對的地方,希望大家指正。