iOS开发网络篇—JSON介绍

一、什么是JSON

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

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

 

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

{"name" : "jack", "age" : 10}

{"names" : ["jack", "rose", "jim"]}

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

 

要想从JSON中挖掘出具体数据,得对JSON进行解析。即把JSON 转换为 OC数据类型

 

二、JSON – OC 转换对照表

对照关系

 

三、JSON解析方案

1.在iOS中,JSON的常见解析方案有4种

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

(2)苹果原生(自带):NSJSONSerialization(性能最好)

 

2.NSJSONSerialization的常见方法

(1)JSON数据 ——》 OC对象

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

 

(2)OC对象 ——》 JSON数据 

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

3.解析来自服务器的JSON示意图

四、部分代码示例

 1 #import "YYViewController.h"
 2 #import "MBProgressHUD+MJ.h"
 3
 4 @interface YYViewController ()
 5 @property (weak, nonatomic) IBOutlet UITextField *username;
 6 @property (weak, nonatomic) IBOutlet UITextField *pwd;
 7 - (IBAction)login;
 8
 9 @end
10
11 @implementation YYViewController
12
13 - (IBAction)login {
14 //    1.提前的表单验证
15     if (self.username.text.length==0) {
16         [MBProgressHUD showError:@"请输入用户名"];
17         return;
18     }
19     if (self.pwd.text.length==0) {
20         [MBProgressHUD showError:@"请输入密码"];
21         return;
22     }
23 //    2.发送请求给服务器(带上账号和密码)
24     //添加一个遮罩,禁止用户操作
25     [MBProgressHUD showMessage:@"正在努力加载中...."];
26
27 //
28 //    1.设置请求路径
29 //    NSString *urlStr=[NSString stringWithFormat:@"http://192.168.1.53:8080/MJServer/login?username=%@&pwd=%@",self.username.text,self.pwd.text];
30 //    NSURL *url=[NSURL URLWithString:urlStr];
31
32     // 1.设置请求路径
33     NSURL *URL=[NSURL URLWithString:@"http://192.168.1.53:8080/MJServer/login"];//不需要传递参数
34
35 //    2.创建请求对象
36     NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:URL];//默认为get请求
37     request.timeoutInterval=5.0;//设置请求超时为5秒
38     request.HTTPMethod=@"POST";//设置请求方法
39
40     //设置请求体
41     NSString *param=[NSString stringWithFormat:@"username=%@&pwd=%@",self.username.text,self.pwd.text];
42     //把拼接后的字符串转换为data,设置请求体
43     request.HTTPBody=[param dataUsingEncoding:NSUTF8StringEncoding];
44
45     //客户端类型,只能写英文
46     [request setValue:@"ios+android" forHTTPHeaderField:@"User-Agent"];
47
48 //    3.发送请求
49     //获取一个主队列
50     NSOperationQueue *queue=[NSOperationQueue mainQueue];
51     [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
52         //当请求结束的时候调用(有两种结果,一个是成功拿到数据,也可能没有拿到数据,请求失败)
53         [MBProgressHUD hideHUD];
54         if (data) {//请求成功
55             NSDictionary *dict=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
56             //判断后,在界面提示登录信息
57             NSString *error=dict[@"error"];
58             if (error) {
59                 [MBProgressHUD showError:error];
60             }else
61             {
62                 NSString *success=dict[@"success"];
63                 [MBProgressHUD showSuccess:success];
64             }
65         }else   //请求失败
66         {
67             [MBProgressHUD showError:@"网络繁忙,请稍后重试!"];
68         }
69     }];
70     NSLog(@"请求发送完毕");
71 }
72 @end
时间: 2024-08-02 07:11:58

iOS开发网络篇—JSON介绍的相关文章

iOS开发网络篇—XML介绍

一.XML简单介绍 XML:全称是Extensible Markup Language,译作"可扩展标记语言" 跟JSON一样,也是常用的一种用于交互的数据格式,一般也叫XML文档(XML Document)   XML举例 <videos>     <video name="小黄人 第01部" length="30" />     <video name="小黄人 第02部" length=&q

iOS开发网络篇—简单介绍ASI框架的使用

说明:本文主要介绍网络编程中常用框架ASI的简单使用. 一.ASI简单介绍 ASI:全称是ASIHTTPRequest,外号"HTTP终结者",功能十分强大. ASI的实现基于底层的CFNetwork框架,因此运行效率很高.可惜作者早已停止更新,有一些潜在的BUG无人去解决 ASI的github地址 https://github.com/pokeb/asi-http-request ASI的使用参考 http://www.cnblogs.com/dotey/archive/2011/0

iOS开发网络篇—使用ASI框架进行文件下载

iOS开发网络篇-使用ASI框架进行文件下载 说明:本文介绍iOS网络编程中经常用到的框架ASI,如何使用该框架进行文件的下载. 一.简单介绍 代码示例: 1 #import "YYViewController.h" 2 #import "ASIHTTPRequest.h" 3 4 @interface YYViewController () 5 6 7 @end 8 9 @implementation YYViewController 10 11 - (void)

iOS开发网络篇—大文件的多线程断点下载

iOS开发网络篇-多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时开启多条线程下载一个较大的文件.因为实现过程较为复杂,所以下面贴出完整的代码. 实现思路:下载开始,创建一个和要下载的文件大小相同的文件(如果要下载的文件为100M,那么就在沙盒中创建一个100M的文件,然后计算每一段的下载量,开启多条线程下载各段的数据,分别写入对应的文件部分). 项目中用到的主要类如下: 完成的实现代码如下: 主控制器中的代码: 1 #import "YYViewControl

iOS开发网络篇—数据缓存

iOS开发网络篇-数据缓存 一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造成以下问题 (1)用户流量的浪费 (2)程序响应速度不够快 解决上面的问题,一般考虑对数据进行缓存. 二.缓存 为了提高程序的响应速度,可以考虑使用缓存(内存缓存\硬盘缓存) 第一次请求数据时,内存缓存中没有数据,硬盘缓存中没有数据. 缓存数据的过程 当服务器返回数据时,需要做以下步骤 (1)使用服务器

iOS开发网络篇—文件下载(一&amp;#183;不合理)

iOS开发网络篇-文件下载(一·不合理) 一.小文件下载 如果文件比较小,下载方式会比较多 直接用NSData的+ (id)dataWithContentsOfURL:(NSURL *)url; 利⽤NSURLConnection发送一个HTTP请求去下载 如果是下载图片,还可以利用SDWebImage框架  二.沙盒 1.在finder中,系统的一些文件(资源库)是隐藏的,可以通过在终端运行下图的代码,显示隐藏的文件. 显示隐藏系统文件: defaults write com.apple.fi

iOS开发网络篇—文件的上传

说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代码. 主控制器的关键代码: YYViewController.m 1 #import "YYViewController.h" 2 3 #define YYEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding] 4 5 @interface YYViewCont

iOS开发网络篇—实现大文件的多线程断点下载_IOS

说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时开启多条线程下载一个较大的文件.因为实现过程较为复杂,所以下面贴出完整的代码. 实现思路:下载开始,创建一个和要下载的文件大小相同的文件(如果要下载的文件为100M,那么就在沙盒中创建一个100M的文件,然后计算每一段的下载量,开启多条线程下载各段的数据,分别写入对应的文件部分). 项目中用到的主要类如下: 完成的实现代码如下: 主控制器中的代码: #import "YYViewController.h" #import

iOS开发网络篇—发送json数据给服务器以及多值参数

一.发送JSON数据给服务器 发送JSON数据给服务器的步骤: (1)一定要使用POST请求 (2)设置请求头 (3)设置JSON数据为请求体 代码示例: 1 #import "YYViewController.h" 2 3 @interface YYViewController () 4 5 @end 6 7 @implementation YYViewController 8 9 - (void)viewDidLoad 10 { 11 [super viewDidLoad]; 12