iOS上的http请求和JSON解析
来源:互联网 发布:淘宝主营占比重要性 编辑:程序博客网 时间:2024/06/05 14:07
iOS Networking - 笔记
课程笔记目录:
1.http请求和JSON解析(所在文章)
2.Networking的MVC框架
以上文章的简介:iOS Networking
以下是lesson 1的笔记
目录
- http请求 和 解析JSON
- 主要步骤
- 主要步骤对应的函数
- 这样步骤的一个解释
- 检查错误的解释
- 代码
http请求 和 解析JSON
以下将分成主要的7步来达到目的
主要步骤
1.设置URL参数
2.构建URL
3.设置request
4.设置request后该做的任务
-- 检查错误
---- 1.检查request是否有错误
---- 2.检查发送request后是否成功得到respond
---- 3.检查respond的数据是否为空
-- 5. 解析http request得到的数据为JSON
-- 检查错误
---- 1.检查JSON数据是否有错误
---- 2.检查需要的数据是否为空
-- 6. 使用数据
7.开始发送request
主要步骤对应的函数
1.URL参数字典和escapedParameters(dictionary) //这个是自己定义的函数
2.NSURL(string:)
3.NSMutableURLRequest(URL:)
4.session.dataTaskWithRequest(:completionHandler:)
5.NSJSONSerialization.JSONObjectWithData(:options:)
6.使用数据
7.NSURLSessionTask.resume()
这步骤的原因
其实反过来思考就可以了。
首先我们要想得到JSON,
就需要用到NSJSONSerialization.JSONObjectWithData(_:options:)
,而这个函数需要data
这个参数。
于是就需要用session.dataTaskWithRequest(_:completionHandler:)
,而这个函数需要request
这个参数。
于是就需要用NSMutableURLRequest(URL:)
,同理这函数需要URL
参数。
于是就要用到NSURL(string:)
,而这函数需要URL的string
参数。
最后就形成了上面的步骤。
检查错误的解释
1.检查request是否填写正确
2.3.通过返回值state code,检查发送是否成功
4.检查返回的数据data是否为空
以下为代码(使用课程上的项目代码)
/* 1. 设置请求参数 */ let methodParameters = [ "api_key": appDelegate.apiKey, "request_token": requestToken ] /* 2.构建URL */ let urlString = appDelegate.baseURLSecureString + "authentication/session/new" + appDelegate.escapedParameters(methodParameters) let url = NSURL(string: urlString)! /* 3.设置request */ let request = NSMutableURLRequest(URL: url) request.addValue("application/json", forHTTPHeaderField: "Accept") /*如果是POST method let request = NSMutableURLRequest(URL: url) request.HTTPMethod = "POST" request.addValue("application/json", forHTTPHeaderField: "Accept") request.addValue("application/json", forHTTPHeaderField: "Content-Type") request.HTTPBody = "{\"media_type\":\"movie\",\"media_id\":\(self.movie!.id),\"favorite\":true}".dataUsingEncoding(NSUTF8StringEncoding) */ /* 4.设置request后该做的任务 */ let task = session.dataTaskWithRequest(request) { (data, response, error) in /* 以下会有三段检查 1.检查request是否有错 2.检查发送request后是否成功 3.检查request得到的数据是否为空 */ /* GUARD: Was there an error? 检查错误*/ guard (error == nil) else { dispatch_async(dispatch_get_main_queue()) { self.debugTextLabel.text = "Login Failed (Session ID)." } print("There was an error with your request: \(error)") return } /* GUARD: Did we get a successful 2XX response? 检查http 请后 返回的status code,验证是否请求成功 */ guard let statusCode = (response as? NSHTTPURLResponse)?.statusCode where statusCode >= 200 && statusCode <= 299 else { if let response = response as? NSHTTPURLResponse { print("Your request returned an invalid response! Status code: \(response.statusCode)!") } else if let response = response { print("Your request returned an invalid response! Response: \(response)!") } else { print("Your request returned an invalid response!") } return } /* GUARD: Was there any data returned? 检查是否 返回的数据是否不为空*/ guard let data = data else { print("No data was returned by the request!") return } /* 5. 解析数据为JSON格式 */ let parsedResult: AnyObject! do { parsedResult = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments) } catch { parsedResult = nil print("Could not parse the data as JSON: '\(data)'") return } /* GUARD: Did TheMovieDB return an error? 返回的JSON是否有错误 */ guard (parsedResult.objectForKey("status_code") == nil) else { print("TheMovieDB returned an error. See the status_code and status_message in \(parsedResult)") return } /* GUARD: Is the "sessionID" key in parsedResult? 检查是否有哪个key */ guard let sessionID = parsedResult["session_id"] as? String else { dispatch_async(dispatch_get_main_queue()) { self.debugTextLabel.text = "Login Failed (Session ID)." } print("Cannot find key 'sessionID' in \(parsedResult)") return } /* 6. Use the data! 使用数据*/ self.appDelegate.sessionID = sessionID self.getUserID(self.appDelegate.sessionID!) } /* 7. Start the request 开始请求 */ task.resume()
- iOS上的http请求和JSON解析
- http请求和json解析
- http请求和json解析的截取字符串
- ios发送HTTP请求和操作JSON
- IOS 请求数据解析 XML 和 JSON
- iOS 网络数据请求和Json 解析
- c++ http请求,json解析
- 作业三——contentProvide、http请求和json解析
- HTTP的post和get请求解析
- Http协议的请求和响应解析
- iOS HTTP请求与解析
- iOS HTTP请求与解析
- iOS 自己封装的网络请求,json解析的类
- iOS 自己封装的网络请求,json解析的类
- iOS 通过HTTP获取和解析XML或者JSON 的类
- ios自带的json对请求数据进行解析
- Android发送http请求并解析json
- http get/post请求及json解析
- nginx 图片防盗链
- Java读书笔记十二(Java中的代码块)
- ViewController的学习与使用
- android Studio获取SHA1等信息的方法
- 查看包含cool的应用所占用的内存
- iOS上的http请求和JSON解析
- 小米路由器:路由器的外皮下到底是什么?
- jquery 加载等待效果
- 不同系统不同语言之间的交互使
- 四种方案解决ScrollView嵌套ListView问题 (转)
- IO流--字符流缓冲区(BufferedReader,BufferedWriter)
- 基于GIS在SuperMap中的分析应用 ——滇金丝猴生境适宜性分析
- html5 new FileReader()生成图片
- 分享段代码-格式化时间(显示秒值为**年**月**天 **时**分**秒 如1年2个月3天 10小时)