iOS网络编程3—JSON解析

来源:互联网 发布:java多级菜单 编辑:程序博客网 时间:2024/05/21 11:06

什么是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