iOS网络编程-URL网络数据的解析

2024-09-06 11:18
文章标签 数据 编程 网络 解析 ios url

本文主要是介绍iOS网络编程-URL网络数据的解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

关于网络数据的解析的一些简单的讲解

最近接触到一些关于网络数据解析的问题,这里总结一点有关iOS网络数据解析的相关内容。

首先,先抛出几个相关的概念和逻辑关系,方便大家对网络编程有个初步的了解:
我们首先要把这个网络数据解析成相应的XML或者JSON格式的文件,再解析这个文件变成我们熟悉的model对象,这样才能对其数据进行相关的操作。
这里解析网络数据有两种方法:GET请求
和 POST请求,下面来介绍这两种解析方法
为了大家看的比较方便,先写出iOS7.0之后最常用的GET和POST解析的方法。
用NSURLSession解析 iOS7.0之前使用NSURLConnection来解析,这里不再叙述
解析网络数据有同步和异步之分,由于在真正的开发中很少用到同步解析,所以我们先来看一下异步解析:

(1)GET请求

(注:这里的GET_URL 是一个URL网址字符串的宏定义)

    //1.获取URLNSURL *url = [NSURL URLWithString:GET_URL];//2.创建session (用单例方法初始化)NSURLSession *session = [NSURLSession sharedSession];//3.创建task请求任务NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {if (!error) {NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];NSLog(@"%@", dict);//这里得到的字典就是JSON文件,我们在这里打印验证一下,如果需要将JSON文件解析成model对象,将他存储起来再解析就可以(JSON解析后面会有一个代码展示)}}];//4.将任务'执行'[task resume];

(2)POST请求
POST请求的网址是有BODY网址的,它将网址分开存储用来保证网络传输时的安全性 对比GET请求这里需要设置’BODY’这时需要NSURLRequest

    //1.获取URLNSURL *url = [NSURL URLWithString:POST_URL];//2.创建可变的URLRequestNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];//3.POST请求的网址是有BODY网址的,它将网址分开存储用来保证网络传输时的安全性 这里需要用Request来设置'BODY'//3.1将BODY字符串转化为data类型NSData *data = [POST_BODY dataUsingEncoding:NSUTF8StringEncoding];//3.2设置request的HTTPMthod属性为POST(必须大写)request.HTTPMethod = @"POST";//3.3设置HTTPBody属性request.HTTPBody = data;//4.创建sessionNSURLSession *session = [NSURLSession sharedSession];//5.创建sessionDataTaskNSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {if (!error) {NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];NSLog(@"%@", dict);//同上}}];//6.执行task[task resume];

最后,给大家一段我写的一个简单的完整的网络数据解析成model对象 最后显示在tableView上的代码 供大家参考

//初始化数组接收model对象self.dataArray = [NSMutableArray array];NSURL *url = [NSURL URLWithString:POST_1];NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];request.HTTPMethod = @"POST";request.HTTPBody = [POST_1_BODY dataUsingEncoding:NSUTF8StringEncoding];NSURLSession *session = [NSURLSession sharedSession];//注意block里不能出现self 会造成循环引用__weak typeof(self)weakSelf = self;NSURLSessionDataTask *task1 = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {if (!error) {//JSON数据的解析NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];NSArray *array = [dict objectForKey:@"newsList"];for (NSDictionary *newDict in array) {Model *model = [Model new];[model setValuesForKeysWithDictionary:newDict];NSLog(@"%@", model);[weakSelf.dataArray addObject:model];}
#pragma mark 在block里reloadData不然会造成数据不及时刷新[weakSelf.tableView reloadData];}}];[task1 resume];

其中JSON数据解析的部分这里就不再详细描述了 我的上一篇博客应该有提到过 最后运行处的效果如图:

这篇关于iOS网络编程-URL网络数据的解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1141853

相关文章

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制