iOS网络编程3—JSON解析

什么是JSON

1.JSON是一种轻量级的数据格式,一般用于数据交互

2.服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外)


JSON的格式很像OC中的字典和数组

{"name":"zhong","age":20}

{"names":["zhong","li","huang"]}

标准JSON格式的注意点:key必须用双引号


要想从JSON中挖出具体数据,得对JSON进行解析

JSON转换为OC数据类型,其规律如下

     JSON                                    OC

大括号{  }                            NSDictionary

中括号[  ]                             NSArray

双引号 " "                            NSString

数字 10、10.8                     NSNumber


JSON解析方案

常见的解析方案有4种

第三方框架:JSONKit、SBJson、TouchJSON(性能从左到右,越差)

苹果原生(自带):NSJSONSerialization(性能最好,一般用这种)


NSJSONSerialization的常见方法:

JSON数据转换为OC对象

+(id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError *__autoreleasing *)error;


OC 对象转换为JSON数据

+(NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError *__autoreleasing *)error


例如在上次讲解到HTTP请求中http://blog.csdn.net/bun12345/article/details/44985563

在后续代码中补上:

</pre><pre name="code" class="objc">//3.发送用户名和密码给服务器
    
        //创建一个url:请求路径
    NSString *urlStr = [NSString stringWithFormat:@"http://localhost/jiaxiao/login?username=%@&pwd=%@",usernameText, pwdText];
    
    NSURL *url = [NSURL URLWithString:urlStr];

       //创建一个请求
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
      //发送一个同步请求(在主线程发送请求),不过一般是不用同步请求的,比较容易卡住
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    
    //解析服务器返回的 JSON数据
    NSDictionary * dict= [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
    
    NSString *error = dict[@"error"];
    if(error)
    {
        //{"error":用户名不存在}
        //{"error":密码不正确"}
        [self showError:error];

    }else{
        //{"success":登陆成功"}
        NSString *success = dict[@"success"];
        [self showError:success];
        
    }

这样就完成了对服务器返回来的json数据进行了解析,总的来说,我们要做的工作就是,知道服务器的url和要传的参数,然后向服务器发出请求,解析服务器返回来的数据就行了。



即客户端向服务器发送请求,服务器返回NSData,(JSON数据),我们将其转换为OC对象(字典或者数组等),返回给客户端。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值