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];

    }

    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

//创建数据类使用重写的初始化方法

}


注:本篇博客是我自己自己的一些理解,可能会有不对的地方,希望大家指正。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值