网络篇 - 04.网络数据解析(JSON)
来源:互联网 发布:淘宝网店开店技巧 编辑:程序博客网 时间:2024/06/05 18:48
1.网络数据解析概述
- 由于服务器端返回给我们的数据格式有多种,我们需要将数据转换为我们需要的格式,这里就需要用到数据解析
- 服务器传输给我们的数据主要有三种:
- JSON
- XML
- 二进制数据(图片、视频之类的信息)
2.JSON数据概述
- JSON数据是民间版的数据格式,是目前最主流的数据格式,另一种是官方版的数据个数XML
- JSON是一种轻量级的数据格式,一般用于数据交互
- JSON的格式很像OC中的字典和数组
{"name" : "jack", "age" : 10}{"names" : ["jack", "rose", "jim"]}
- 标准JSON格式的注意点:key必须用双引号
- 要想从JSON中挖掘出具体数据,得对JSON进行解析
- 我们解析JSON数据就是将其转换为 OC数据类型
- JSON和OC对象转换后对应数据类型
- {} -> NSDictionary @{}
- [] -> NSArray @[]
- “jack” -> NSString @”jack”
- 10 -> NSNumber @10
- 10.5 -> NSNumber @10.5
- true -> NSNumber @1
- false -> NSNumber @0
- null -> NSNull
3.JSON解析方案
- 在iOS中,JSON的常见解析方案有4种
- 在iOS中,JSON的常见解析方案有4种
- 第三方框架:JSONKit、SBJson、TouchJSON(性能从左到右,越差)
- 苹果原生(自带):NSJSONSerialization(性能最好)
- 由于苹果自带的JSON解析性能最好,所以我们主要使用的也是苹果原生的解析器
4.JSON解析示例
- 本地数据解析
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ NSString *json = @"[\"jack\",\"tom\"]"; NSString *json1 = @"null"; // 将字符串转换为二进制数据 NSData *data = [json1 dataUsingEncoding:NSUTF8StringEncoding]; // 解析JSON数据 /* 参数解释: 第一个参数:传入要解析的数据 第二个参数:解析模式 NSJSONReadingMutableContainers = 转换出来的对象是可变数组或者可变字典 NSJSONReadingMutableLeaves = 转换出来的OC对象中的字符串是可变的,注意: iOS7之后无效 bug NSJSONReadingAllowFragments = 如果服务器返回的JSON数据, 不是标准的JSON, 那么就必须使用这个值, 否则无法解析 */ id objc = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil]; NSLog(@"%@",[objc class]); // 输出结果NSNull}
- 网络数据解析
// 解析网络数据-(void)JSONNetworkData{ // 1.获取网络数据 NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/login?username=zj&pwd=123it&type=JSON"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { // 2.解析网络数据 // 2.1打印数据,获取数据格式 NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);// 输出结果:{"success":"登录成功"} // 2.2解析数据 NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; NSLog(@"%@",dict);// 输出结果:{success = "\U767b\U5f55\U6210\U529f";} }];}
- OC对象转换为JSON数据
-(void)objc2JSON{ NSDictionary *dict = @{ @"name":@"MrRight", @"age":@"25", @"sex":@"Man", }; /* 第一个参数: 需要转换为JSON的对象 第二个参数: 转换为JSON之后是否需要排版 第三个参数: 错误信息 */ NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:nil]; // 将JSON数据转换为字符串 NSString *temp = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSLog(@"%@",temp); /* 输出结果: { "name" : "MrRight", "age" : "25", "sex" : "Man" } */}
5.复杂JSON数据解析
- 创建UITableViewController
- 一般开发中,正常JSON数据的解析,我们都会创建模型来保存解析后的数据,这里由于获取的数据比较简单,就没有新建模型了
#import "ViewController.h"#import <SDWebImage/UIImageView+WebCache.h>#import <MJRefresh/MJRefresh.h>#import <MediaPlayer/MPMoviePlayerViewController.h>@interface ViewController ()@property (nonatomic, strong) NSArray *videos;// 视频信息@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; // 1.获取网络数据 NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/video?type=JSON"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { // 2.解析JSON数据 NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; self.videos = dict[@"videos"]; [self.tableView reloadData]; }];}#pragma mark - UITableViewDataSource-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return self.videos.count; }-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ // 1.创建cell static NSString *identifier = @"cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; // 2.设置cell的数据 NSDictionary *dict = self.videos[indexPath.row]; cell.textLabel.text = dict[@"name"]; cell.detailTextLabel.text = [NSString stringWithFormat:@"%@",dict[@"length"]]; // 2.1 缓存并下载图片 NSString *urlStr =[NSString stringWithFormat:@"http://120.25.226.186:32812/%@", dict[@"image"]]; urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *url = [NSURL URLWithString:urlStr]; [cell.imageView sd_setImageWithURL:url placeholderImage:nil]; // 3.返回cell return cell;}#pragma mark - UITableViewDelegate// 选中某一行后播放视频-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ // 获取视频URL NSDictionary *dict = self.videos[indexPath.row]; NSString *urlStr =[NSString stringWithFormat:@"http://120.25.226.186:32812/%@", dict[@"url"]]; urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *url = [NSURL URLWithString:urlStr]; // 加载视频播放控制器 MPMoviePlayerViewController *vc = [[MPMoviePlayerViewController alloc] initWithContentURL:url]; // 显示控制器 [self presentViewController:vc animated:YES completion:nil];}
0 0
- 网络篇 - 04.网络数据解析(JSON)
- android解析网络json数据(1)
- UI-json解析网络数据
- 网络编程--JSON数据解析
- Json解析网络请求数据
- 网络数据传递之 Json数据解析
- iOS开发网络篇—JSON数据的解析
- iOS开发网络篇—JSON数据的解析
- iOS开发网络篇—JSON数据的解析
- iOS学习笔记之网络篇数据解析(JSON/XML)
- Android基础(网络)——Json数据解析
- Android之网络编程(四)解析 JSON 格式数据
- Java网络爬虫(七)--JSON数据的解析
- iOS 网络数据请求和Json 解析
- 【iOS开发-网络】解析json数据
- 网络访问之json数据解析
- 访问网络数据+json解析代码片段
- ios网络数据下载和JSON解析
- Linux登陆或者su - 用户慢问题
- Java IO流->处理流->标准输入输出流:System.in&System.out
- 内存缓冲区fflush(stdin)
- JavaScript内核笔记02-对象、原型、this指针
- json字符串的类型以及在javascript中的解析方式
- 网络篇 - 04.网络数据解析(JSON)
- 黑马程序员--Java集合框架(一)
- POJ 1274--The Perfect Stall【二分图 && 最大匹配数 && 水题】
- HDU 2522 求循环小数问题
- 网络基础知识
- Redmine中的wiki支持HTMl语言
- 【JavaScript】DOM操作表格
- 一些常用的webservice接口
- 64位计算机注册32位插件-----TeeChart