1. 程式人生 > >iOS開發中對JSON解析資料的處理

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

//建立資料類使用重寫的初始化方法

}

注:本篇部落格是我自己自己的一些理解,可能會有不對的地方,希望大家指正。