iOS开发网络篇-JSON文件的解析
一、什么是JSON数据
1.JSON的简单介绍
JSON:是一种轻量级的传输数据的格式,用于数据的交互
JSON是javascript语言的一个子集.javascript是个脚本语言(不需要编译),用来给HTML增加动态功能.
javascript和java没有半毛钱的关系!
服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外).
2.JSON的语法规则
<1> 数据以键值的方式保存;
键(key)必须用双引号("key"),与键值之间以':'分隔; {"name":"小明"}
<2> 数据和数据之间以逗号(,)分隔. {"name":"小明","age":13}
<3> {}表示对象. "person":{"name":"小明","age":13}
<4> []表示数组. "persons":[
{"name":"小明","age":13},
{"name":"小红","age":14},
{"name":"小花","age":15}
]
3.JSON与OC转换对照
大括号 {} == NSDictionary;
中括号 [] == NSArray;
双引号" " == NSString;
数字13,13.5 == NSNumber;
注意:数字推荐使用NSNumber来接收,为了更好针对null赋值
二、JSON的解析(反序列化)
反序列化: 将从服务器接收到的JSON数据(二进制数据)转换成OC数据类型(NSArray,NSDictionary等.)的过程.
目的: JSON数据 --> OC对象; 得到数据字典或者数据数组
好处: 简化程序的开发,方便后续的字典转模型.
1.JSON的数据解析的方式
在iOS中,常见的JSON数据解析方案有4种:
第三方框架:JSONKit, SBJson, TouchJson.性能从左到右,依次变差.(iOS 5(2011年)以前)
苹果原生(自带):NSJSONSerialization (性能是最好的.iOS5以后推出).
例程演示:
从本地搭建的服务器中读取JSON文件,并且显示出来到一个tableView上面
本地服务器资源:
JSON文件截图
效果图:
代码实现:
// // GXVideo.h // 03-JSON的数据解析 // // Created by gxiangzi on 15/8/17. // Copyright (c) 2015年 hqu. All rights reserved. // #import <Foundation/Foundation.h> @interface GXVideo : NSObject @property (copy, nonatomic) NSString* length; @property (copy, nonatomic) NSString* url; @property (copy, nonatomic) NSString* image; @property (copy, nonatomic) NSString* ID; @property (copy, nonatomic) NSString* name; + (instancetype)videoWithDict:(NSDictionary *)dict; @end
// // GXVideo.m // 03-JSON的数据解析 // // Created by gxiangzi on 15/8/17. // Copyright (c) 2015年 hqu. All rights reserved. // #import "GXVideo.h" @implementation GXVideo + (instancetype)videoWithDict:(NSDictionary *)dict { GXVideo *video = [[self alloc] init]; [video setValuesForKeysWithDictionary:dict]; return video; } @end
// // GXViewController.h // 03-JSON的数据解析 // // Created by gxiangzi on 15/8/17. // Copyright (c) 2015年 hqu. All rights reserved. // #import <UIKit/UIKit.h> @interface GXViewController : UITableViewController @end
// // GXViewController.m // 03-JSON的数据解析 // // Created by gxiangzi on 15/8/17. // Copyright (c) 2015年 hqu. All rights reserved. // #import "GXViewController.h" #import "GXVideo.h" #import "UIImageView+WebCache.h" #import <MediaPlayer/MediaPlayer.h> @interface GXViewController () @property (nonatomic, strong) NSMutableArray* videos; @end @implementation GXViewController #pragma mark -懒加载 - (NSMutableArray*)videos { if (!_videos) { _videos = [NSMutableArray array]; } return _videos; } - (void)viewDidLoad { [super viewDidLoad]; // 从网络解析数据 NSString* urlString = @"http://localhost/resources/vedios.json"; NSURL* url = [NSURL URLWithString:urlString]; // 创建一个网络请求 NSURLRequest* request = [NSURLRequest requestWithURL:url]; __weak typeof(self) wself = self; // 发送一个网络请求 [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse* response, NSData* data, NSError* connectionError) { // 链接成功之后的操作返回Data // 数据转换成JSON NSArray* arrayVideo = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:NULL]; [arrayVideo enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL* stop) { NSDictionary* dict = obj; GXVideo* video = [GXVideo videoWithDict:dict]; [wself.videos addObject:video]; }]; [wself.tableView reloadData]; }]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } #pragma mark - Table view data source - (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section { return self.videos.count; } - (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath { static NSString* resuedId = @"cell"; UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:resuedId]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:resuedId]; } GXVideo* video = self.videos[indexPath.row]; cell.textLabel.text = video.name; NSString* timeDetail = [NSString stringWithFormat:@"时长: %@ 分钟", video.length]; cell.detailTextLabel.text = timeDetail; // 利用三方框架SDWebImage [cell.imageView sd_setImageWithURL:[NSURL URLWithString:video.image] placeholderImage:[UIImage imageNamed:@"placeholder-1"]]; return cell; } #pragma mark - 播放视频 - (void)tableView:(UITableView*)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath { GXVideo* video = self.videos[indexPath.row]; NSURL* url = [NSURL URLWithString:video.url]; // 创建一个播放器 MPMoviePlayerViewController* media = [[MPMoviePlayerViewController alloc] initWithContentURL:url]; [self presentMoviePlayerViewControllerAnimated:media]; } @end
iOS开发网络篇-JSON文件的解析的更多相关文章
- iOS开发网络篇—JSON数据的解析
iOS开发网络篇—JSON数据的解析 iOS开发网络篇—JSON介绍 一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式 ...
- iOS开发网络篇—XML数据的解析
iOS开发网络篇—XML数据的解析 iOS开发网络篇—XML介绍 一.XML简单介绍 XML:全称是Extensible Markup Language,译作“可扩展标记语言” 跟JSON一样,也是 ...
- iOS开发网络篇—大文件的多线程断点下载
http://www.cnblogs.com/wendingding/p/3947550.html iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时 ...
- iOS开发网络篇—大文件的多线程断点下载(转)
http://www.cnblogs.com/wendingding/p/3947550.html iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了 ...
- iOS开发——网络篇——JSON和XML,NSJSONSerialization ,NSXMLParser(XML解析器),NSXMLParserDelegate,MJExtension (字典转模型),GDataXML(三方框架解析XML)
一.JSON 1.JSON简介什么是JSONJSON是一种轻量级的数据格式,一般用于数据交互服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典 ...
- iOS开发网络篇—JSON介绍
一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典和数组 {" ...
- iOS开发网络篇—文件的上传
iOS开发网络篇—文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代 ...
- iOS开发网络篇—发送json数据给服务器以及多值参数
iOS开发网络篇—发送json数据给服务器以及多值参数 一.发送JSON数据给服务器 发送JSON数据给服务器的步骤: (1)一定要使用POST请求 (2)设置请求头 (3)设置JSON数据为请求体 ...
- iOS开发网络篇—发送GET和POST请求(使用NSURLSession)
iOS开发网络篇—发送GET和POST请求(使用NSURLSession) 说明: 1)该文主要介绍如何使用NSURLSession来发送GET请求和POST请求 2)本文将不再讲解NSURLConn ...
随机推荐
- F - Wormholes
题目大意: 农民约翰在农场散步的时候发现农场有大量的虫洞,这些虫洞是非常特别的因为它们都是单向通道,为了方便现在把约翰的农田划分成N快区域,M条道路,W的虫洞. 约翰是时空旅行的粉丝,他希望这样做,在 ...
- tomcat不用工程名访问怎么配置?
tomcat不用工程名访问配置,直接用域名访问 在 tomcat6的安装路径下,D:\Tomcat-6\conf,修改server.xml文件 编辑Host节点, <Host appBase=& ...
- Struts2学习笔记(三):result配置的各项视图转发类型
Struts 1: <action path="/user" type="org.sunny.user.action.UserAction" ...> ...
- Mysql join语句解析
1. 右连接(right join, right outer join) 解释:以右表(Sys_Employee)为准,而左表(Sys_Department)中的记录只有当其DepartmentId在 ...
- Unity3D 画线插件 Vectrosity_Simple2DLine
Vectrosity是一个很方便的画线插件,用它我们可以画出2D,3D,贝塞尔,圆,椭圆等各种线条图案. :链接: http://pan.baidu.com/s/1pJjTFjt 密码: uesn 首 ...
- 3DS MAX 导出FBX到Unity3D设置
- myeclipse html乱码
myeclispe 中 html乱码 在页面的开头写上即可 <meta http-equiv="content-type" content="text/html; ...
- 简单说明Python中的装饰器的用法
简单说明Python中的装饰器的用法 这篇文章主要简单说明了Python中的装饰器的用法,装饰器在Python的进阶学习中非常重要,示例代码基于Python2.x,需要的朋友可以参考下 装饰器对与 ...
- SpringMVC10数据验证
/** * @NotBlank 作用在String * @NotEmpty 作用在集合上 * @NotNull 作用在基本数据类型上 * */ public class User { @NotNull ...
- OD: Kernel Vulnerabilities
内核漏洞概述 内核漏洞的分类 运行在 Ring0 上的操作系统内核.设备驱动.第三方驱动能共享同一个虚拟地址空间,可以完全访问系统空间的所有内存,而不像用户态进程那样拥有独立私有的内存空间.由于内核程 ...