一、什么是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文件的解析的更多相关文章

  1. iOS开发网络篇—JSON数据的解析

    iOS开发网络篇—JSON数据的解析 iOS开发网络篇—JSON介绍 一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式 ...

  2. iOS开发网络篇—XML数据的解析

     iOS开发网络篇—XML数据的解析 iOS开发网络篇—XML介绍 一.XML简单介绍 XML:全称是Extensible Markup Language,译作“可扩展标记语言” 跟JSON一样,也是 ...

  3. iOS开发网络篇—大文件的多线程断点下载

    http://www.cnblogs.com/wendingding/p/3947550.html iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了同时 ...

  4. iOS开发网络篇—大文件的多线程断点下载(转)

    http://www.cnblogs.com/wendingding/p/3947550.html   iOS开发网络篇—多线程断点下载 说明:本文介绍多线程断点下载.项目中使用了苹果自带的类,实现了 ...

  5. iOS开发——网络篇——JSON和XML,NSJSONSerialization ,NSXMLParser(XML解析器),NSXMLParserDelegate,MJExtension (字典转模型),GDataXML(三方框架解析XML)

    一.JSON 1.JSON简介什么是JSONJSON是一种轻量级的数据格式,一般用于数据交互服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典 ...

  6. iOS开发网络篇—JSON介绍

    一.什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外) JSON的格式很像OC中的字典和数组 {" ...

  7. iOS开发网络篇—文件的上传

    iOS开发网络篇—文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代 ...

  8. iOS开发网络篇—发送json数据给服务器以及多值参数

    iOS开发网络篇—发送json数据给服务器以及多值参数 一.发送JSON数据给服务器 发送JSON数据给服务器的步骤: (1)一定要使用POST请求 (2)设置请求头 (3)设置JSON数据为请求体 ...

  9. iOS开发网络篇—发送GET和POST请求(使用NSURLSession)

    iOS开发网络篇—发送GET和POST请求(使用NSURLSession) 说明: 1)该文主要介绍如何使用NSURLSession来发送GET请求和POST请求 2)本文将不再讲解NSURLConn ...

随机推荐

  1. 自动化Cobbler安装

    #install cobbler-server soft #date 2013.08.07 #disabled iptables and selinux /etc/init.d/iptables st ...

  2. 考研路茫茫--单词情结 - HDU 2243(AC自动机+矩阵乘法)

    分析:与poj的2778差不多的,求出来所有的情况然后减去不包含的就行了,这次使用了一下kuangbin的那种自动机写法,确实还不错,因为尤是在建立矩阵的时候更加方便.   代码如下: ======= ...

  3. Android中关于Task的一些认识

    Android中Task是一个逻辑上的概念,简单地说,就是一个栈里面顺序存储着的多个Activity.这些Activity能够是来自同一个App,也能够是来自不同的Apps. Task的创建 比方之前 ...

  4. Android 使用加速度传感器实现摇一摇功能及优化

    如有转载,请声明出处: 时之沙: http://blog.csdn.net/t12x3456 目前很多应用已经实现了摇一摇功能,这里通过讲解该功能的原理及实现回顾一下加速度传感器的使用: 1.首先获得 ...

  5. android开发launcher

    1. launcher是桌面应用程序 一. android.intent.category.LAUNCHER与android.intent.category.HOME的差别?      android ...

  6. Qt 学习之路:存储容器

    存储容器(containers)有时候也被称为集合(collections),是能够在内存中存储其它特定类型的对象,通常是一些常用的数据结构,一般是通用模板类的形式.C++ 提供了一套完整的解决方案, ...

  7. Java对存储过程的调用方法 --转载

    一.Java如何实现对存储过程的调用: A:不带输出参数的 create procedure getsum <--此处为参数--> as declare @sum int<--定义变 ...

  8. setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key delete.的问题

    今天弄ios的sqlite数据库,程序写完后编译发现一个奇怪的问题,错误信息也不提示行号,只有如下信息: 一遍遍的查找代码也没有发现啥问题,后来在storyboard中找到了该错误的原因 原来是一个按 ...

  9. java 类处理工具

    public class ClassUtils { private static final Logger LOGGER = LoggerFactory.getLogger(ClassUtils.cl ...

  10. C#中的线程二(BeginInvoke和Invoke)

    近日,被Control的Invoke和BeginInvoke搞的头大,就查了些相关的资料,整理如下.感谢这篇文章对我的理解Invoke和BeginInvoke的真正含义 . (一)Control的In ...