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)
    }

运行,同样得到结果:



目录
相关文章
|
8月前
|
JSON IDE Java
鸿蒙开发:json转对象插件回来了
首先,我重新编译了插件,进行了上传,大家可以下载最新的安装包进行体验了,还是和以前一样,提供了在线版和IDE插件版,两个选择,最新的版本,除了升级了版本,兼容了最新的DevEco Studio ,还做了一层优化,就是针对嵌套对象和属性的生成,使用方式呢,一年前的文章中有过详细的概述,这里呢也简单介绍一下。
288 4
鸿蒙开发:json转对象插件回来了
|
Java 开发工具 Android开发
Android与iOS开发环境搭建全解析####
本文深入探讨了Android与iOS两大移动操作系统的开发环境搭建流程,旨在为初学者及有一定基础的开发者提供详尽指南。我们将从开发工具的选择、环境配置到第一个简单应用的创建,一步步引导读者步入移动应用开发的殿堂。无论你是Android Studio的新手还是Xcode的探索者,本文都将为你扫清开发道路上的障碍,助你快速上手并享受跨平台移动开发的乐趣。 ####
|
11月前
|
前端开发 JavaScript Java
优雅草卓伊凡:全栈工程师并非盲目学语言,转型价值全解析
优雅草卓伊凡:全栈工程师并非盲目学语言,转型价值全解析
173 0
优雅草卓伊凡:全栈工程师并非盲目学语言,转型价值全解析
|
存储 监控 算法
探秘员工泄密行为防线:基于Go语言的布隆过滤器算法解析
在信息爆炸时代,员工泄密行为对企业构成重大威胁。本文聚焦布隆过滤器(Bloom Filter)这一高效数据结构,结合Go语言实现算法,帮助企业识别和预防泄密风险。通过构建正常操作“指纹库”,实时监测员工操作,快速筛查可疑行为。示例代码展示了如何利用布隆过滤器检测异常操作,并提出优化建议,如调整参数、结合日志分析系统等,全方位筑牢企业信息安全防线,守护核心竞争力。
|
12月前
|
存储 算法 安全
基于 Go 语言的公司内网管理软件哈希表算法深度解析与研究
在数字化办公中,公司内网管理软件通过哈希表算法保障信息安全与高效管理。哈希表基于键值对存储和查找,如用户登录验证、设备信息管理和文件权限控制等场景,Go语言实现的哈希表能快速验证用户信息,提升管理效率,确保网络稳定运行。
230 0
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
存储 安全 数据安全/隐私保护
深入解析iOS 14隐私保护功能:用户数据安全的新里程碑
随着数字时代的到来,个人隐私保护成为全球关注的焦点。苹果公司在最新的iOS 14系统中引入了一系列创新的隐私保护功能,旨在为用户提供更透明的数据使用信息和更强的控制权。本文将深入探讨iOS 14中的几项关键隐私功能,包括App跟踪透明性、简化的隐私设置以及增强的系统安全性,分析它们如何共同作用以提升用户的隐私保护水平。
792 3
|
JSON JavaScript 前端开发
Go语言中json序列化的一个小坑,建议多留意一下
在Go语言开发中,JSON因其简洁和广泛的兼容性而常用于数据交换,但其在处理数字类型时存在精度问题。本文探讨了JSON序列化的一些局限性,并介绍了两种替代方案:Go特有的gob二进制协议,以及msgpack,两者都能有效解决类型保持和性能优化的问题。
479 7
|
数据安全/隐私保护 iOS开发 开发者
iOS 14隐私保护新特性深度解析####
随着数字时代的到来,隐私保护已成为全球用户最为关注的问题之一。苹果在最新的iOS 14系统中引入了一系列创新功能,旨在增强用户的隐私和数据安全。本文将深入探讨iOS 14中的几大隐私保护新特性,包括App跟踪透明度、剪贴板访问通知和智能防追踪功能,分析这些功能如何提升用户隐私保护,并评估它们对开发者和用户体验的影响。 ####
|
JSON 前端开发 JavaScript
聊聊 Go 语言中的 JSON 序列化与 js 前端交互类型失真问题
在Web开发中,后端与前端的数据交换常使用JSON格式,但JavaScript的数字类型仅能安全处理-2^53到2^53间的整数,超出此范围会导致精度丢失。本文通过Go语言的`encoding/json`包,介绍如何通过将大整数以字符串形式序列化和反序列化,有效解决这一问题,确保前后端数据交换的准确性。
397 4

推荐镜像

更多
  • DNS