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 ...
随机推荐
- Parameterized tests
Parameterized继承自Suite.Parameterized是在参数上实现了Suite,修饰一个测试类,然后提供多组构造函数的参数用于测试不同场景. import java.util.Arr ...
- Java中对象的深复制和浅复制详解
1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. ⑵ ...
- Dolls - 4160(简单二分图匹配)
题意:有一些箱子,大箱子可以套小箱子,但是必须h>h,w>w,l>l,求出来最外面能剩下几个箱子无法被嵌套. 分析:思考每个箱子都只会被别的箱子套一次,所以构成一二分匹配模型,只 ...
- Hibernate五 HQL查询
HQL查询一 介绍1.HQL:Hibernate Query Language,是一种完全面向对象的查询语言.使用Hibernate有多重查询方式可供选择:hibernate的HQL查询,也可以使用条 ...
- maven打一个可执行的jar包
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-depen ...
- 宇宙【全7季】【合集】【蓝光1080P】【历史频道】
http://www.bilibili.com/video/av4343074/ 挺好看的 还有一部<宇宙时空之旅>也是挺好看的.
- mvc与mvvm
mvc:被动型式的,也就是说,只有view有要求的时候,控制器才有反应 View Controller Model 可以把一个页面看作是由多个view组成 Controller控制 ...
- ckfinder 1
网上的破解教程对于2.4版本来说已经过时了. 以下是CKFinder 2.4 ASP.NET的亲测可用破解方法,经测试,只需修改两处代码. 打开ckfinder.js, 步骤1. 搜索替换如下代码: ...
- Facebook Hacker Cup 2015 Round 1--Homework(筛选法求素数)
题意:给定A,B,K(A<=B)三个数,问在[A,B]范围内的数素数因子个数为K的个数. 题解:典型的筛选法求素数.首先建立一个保存素数因子个数的数组factorNum[],以及到n为止含有素数 ...
- Hibernate Criterion
在查询方法设计上能够灵活的依据Criteria的特点来方便地进行查询条件的组装.Hibernate设计了CriteriaSpecification作为Criteria的父接口,以下提供了Criteri ...