swift语言IOS8开发战记24 解析Json

简介: 在IOS中使用NSURLConnection实现http通信,NSURLConnection提供了异步和同步两种通信方式,同步请求会造成进程阻塞,通常我们使用异步的方式,不管同步还是异步,建立通信的基本步骤都是一样的:1,创建NSURL2,创建Request对象3,创建NSURLConnection连接第3步结束后就建立了一个http连接。

在IOS中使用NSURLConnection实现http通信,NSURLConnection提供了异步和同步两种通信方式,同步请求会造成进程阻塞,通常我们使用异步的方式,不管同步还是异步,建立通信的基本步骤都是一样的:

1,创建NSURL

2,创建Request对象

3,创建NSURLConnection连接

第3步结束后就建立了一个http连接。

这里我们用一个开放的api做例子:

http://www.weather.com.cn/adat/sk/101010100.html

这是北京市的当前天气信息的json,我们首先来写一个同步的网络连接来获取这个json,新建一个工程,在页面上添加一个按钮,每次点击按钮就会输出json的内容到控制台,控制器代码:

import UIKit

class ViewController: UIViewController {

    @IBAction func showWeatherJson(sender: UIButton) {
        //创建url
        var url:NSURL! = NSURL(string: "http://www.weather.com.cn/adat/sk/101010100.html")
       //创建请求对象
        var urlRequest:NSURLRequest = NSURLRequest(URL: url)
        //创建响应对象
        var response:NSURLResponse?
        //创建错误对象
        var error:NSError?
        //发出请求
        var data:NSData? = NSURLConnection.sendSynchronousRequest(urlRequest, returningResponse: &response, error: &error)
        if error != nil
        {
        println(error?.code)
        println(error?.description)
        
        } else {
        var jsonString = NSString(data: data!, encoding: NSUTF8StringEncoding)
            println(jsonString)
        
        }
        
    }
}

运行结果如下:



下面来展示异步请求的代码:

import UIKit

class ViewController: UIViewController,NSURLConnectionDataDelegate,NSURLConnectionDelegate {

   
    @IBAction func getWeatherJson(sender: UIButton) {
        
        //创建NSURL对象
        var url:NSURL! = NSURL(string: "http://www.weather.com.cn/adat/sk/101010100.html")
        //创建请求对象
        var urlRequest:NSURLRequest = NSURLRequest(URL: url)
        //网络连接对象
        var conn:NSURLConnection? = NSURLConnection(request: urlRequest, delegate: self)
        conn?.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSRunLoopCommonModes)
        //执行
        conn?.start()
        
    }
}

然后在代理方法中添加代码即可,代理NSURLConnectionDataDelegate的代理方法如下:

    func connection(connection: NSURLConnection, willSendRequest request: NSURLRequest, redirectResponse response: NSURLResponse?) -> NSURLRequest? {
        //将要发送请求
        return request
    }
    func connection(connection: NSURLConnection, didReceiveResponse response: NSURLResponse) {
        //接收响应
    }
    func connection(connection: NSURLConnection, didReceiveData data: NSData) {
        //收到数据
    }
    func connection(connection: NSURLConnection, needNewBodyStream request: NSURLRequest) -> NSInputStream? {
        //需要新的内容流
        return request.HTTPBodyStream
    }
    func connection(connection: NSURLConnection, didSendBodyData bytesWritten: Int, totalBytesWritten: Int, totalBytesExpectedToWrite: Int) {
        //发送数据请求
    }
    func connection(connection: NSURLConnection, willCacheResponse cachedResponse: NSCachedURLResponse) -> NSCachedURLResponse? {
        //缓存响应
        return cachedResponse
    }
    func connectionDidFinishLoading(connection: NSURLConnection) {
        //请求结束
    }

定义一个NSMutableData类型数据流,在didReceiveData代理方法中收集数据流,代码如下:

 var jsonData:NSMutableData = NSMutableData()
    func connection(connection: NSURLConnection, didReceiveData data: NSData) {
        //收到数据
        jsonData.appendData(data)
    }

在connectionDidFinishLoading结束请求的代理方法内,解析jsonData数据流。代码如下:

func connectionDidFinishLoading(connection: NSURLConnection) {
        //请求结束
        var jsonString = NSString(data: jsonData, encoding: NSUTF8StringEncoding)
        println(jsonString)
    }

运行,同样得到结果:



目录
相关文章
|
2月前
|
JSON 缓存 自然语言处理
多语言实时数据微店商品详情API:技术实现与JSON数据解析指南
通过以上技术实现与解析指南,开发者可高效构建支持多语言的实时商品详情系统,满足全球化电商场景需求。
|
3月前
|
JSON 算法 API
淘宝商品评论API接口核心解析,json数据返回
淘宝商品评论API是淘宝开放平台提供的数据服务接口,允许开发者通过编程方式获取指定商品的用户评价数据,包括文字、图片、视频评论及评分等。其核心价值在于:
|
1月前
|
JSON Java Go
【GoGin】(2)数据解析和绑定:结构体分析,包括JSON解析、form解析、URL解析,区分绑定的Bind方法
bind或bindXXX函数(后文中我们统一都叫bind函数)的作用就是将,以方便后续业务逻辑的处理。
242 3
|
24天前
|
XML JSON 数据处理
超越JSON:Python结构化数据处理模块全解析
本文深入解析Python中12个核心数据处理模块,涵盖csv、pandas、pickle、shelve、struct、configparser、xml、numpy、array、sqlite3和msgpack,覆盖表格处理、序列化、配置管理、科学计算等六大场景,结合真实案例与决策树,助你高效应对各类数据挑战。(238字)
126 0
|
2月前
|
JSON 自然语言处理 API
多语言实时数据淘宝商品评论API:技术实现与JSON数据解析指南
淘宝商品评论多语言实时采集需结合官方API与后处理技术实现。建议优先通过地域站点适配获取本地化评论,辅以机器翻译完成多语言转换。在合规前提下,企业可构建多语言评论数据库,支撑全球化市场分析与产品优化。
|
缓存 Swift
Swift语言IOS8开发战记25 网络通信Get和Post方式
Get是从服务器上获取数据,Post是向服务器传送数据。对于Get方式,服务器端用Requset.QueryString获取变量的值,对于Post方式,服务器端用Request.Form获取提交的数据。
1100 0
|
Swift iOS开发
Swift语言IOS8开发战记27 Sketch初探
在之前我们新建了一个计算器项目,现在我想要给这个计算器项目制作一个桌面图标,可以使用Sketch,这是一款非常棒的软件。
1084 0
|
数据安全/隐私保护 Swift
swift语言IOS8开发战记19 UIImagePickerController
  我们接着上一话的内容来讲,首先在我们添加一个餐馆的页面中把点击的背景色取消掉使用的是以下语句: cell.selectionStyle = UITableViewCellSelectionStyle.None 除了none之外,还有许多颜色的选项,大家可以自己试试。
990 0
|
Swift
swift语言IOS8开发战记15 Animation Delay
       前几话我们实现了Review按钮的功能,今天来实现Share按钮的功能,由于两个功能的相似性,所以新建一个控制器,ShareViewController类,把ReviewVie...
1179 0
|
定位技术 网络架构 存储
swift语言IOS8开发战记16 Protocol and Map
    接着之前的内容来讲,我们在每个店铺的location后面增加一个地图定位功能,需要把label的尺寸也调节一下,调整后的DetailViewCell代码如下:import UIKit...
1065 0

热门文章

最新文章