文档章节

JSON简介

卡奇匠
 卡奇匠
发布于 2016/02/20 22:58
字数 688
阅读 23
收藏 0

一、JSON简介

1.  JSON概念

JSON 是一种轻量级的传输数据格式,用于数据交互,是 javascript 语言的一个子集。

javascript 是个脚本语言(不需要编译),用来给HTML增加动态功能,javascript和java没有关系!

服务器返回给客户端的数据,一般都是 JSON 格式或者 XML 格式(文件下载除外)。

2.  语法规则

a.  数据以键值的方式保存,键(key)必须用双引号("key"),与键值之间以':'分隔,{"name":"花无缺"}

b.  数据和数据之间以逗号(,)分隔, {"name":"花无缺","age":13}

c.  { }表示对象, "person":{"name":"花无缺","age":13}

d.  [ ]表示数组。

       "persons":[

           {"name":"花无缺","age":13},

           {"name":"小鱼儿","age":14},

           {"name":"邀月","age":15}

       ]

3. JSON与OC转换对照

   大括号 { }  ==  NSDictionary;

   中括号 [ ]  ==  NSArray;

   双引号 " " ==  NSString;

   数字  13,13.5  ==  NSNumber;

4.  数据传输过程

客户端发送请求给服务器,服务器接收到客户端的请求之后,返回给客户端JSON数据,客户端需要把服务器返回的JSON数据转换为OC的数据格式(数组/字典等)。


二、JSON数据解析

1.  JSON数据的解析方法:

使用第三方框架和苹果原生JSON解析器。

在iOS中,常见的JSON数据解析方案有4种。其中3种都是第三方框架:JSONKit、 SBJson【最流行】、TouchJson,性能从左到右,依次变差(iOS 5(2011年)以前)。第4种是苹果原生(自带):NSJSONSerialization (性能是最好的,iOS5以后推出)。

2.  解析JSON数据

a.  反序列化: 

目的:将 JSON数据 --> OC对象,得到数据字典或者数据数组。将从服务器接收到的JSON数据(二进制数据)转换成OC数据类型(NSArray、NSDictionary)的过程。

好处:简化程序的开发,方便后续的字典转模型。

方法:

+ (nullable id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;

b.  序列化

目的:OC对象 --> JSON数据,得到二进制 JSON 数据 NSData,将数组或者字典发送给服务器之前,转换成二进制数据。

好处:方便网络传输,提高传输速度。

方法:

+ (nullable NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;

需要注意的是,在做序列化之前,一定使用 isValidJSONObject 检测一下要序列化的对象是否能够正确被序列化,避免出现闪退!【使用见下面的示例】


c.  JSON解析示例

// JSON的序列化  

NSDictionary *dict1 = 

@{@"name":@"花无缺",@"10":@19,@"height":@"180"};  

NSDictionary *dict2 =

@{@"person":dict1};  

NSArray *array = 

@[@"zhangsan",@"小鱼儿",@"wangwu",dict2];  

BOOL is_YES = 

[NSJSONSerialization isValidJSONObject:array];  

if (is_YES) {  

   NSData *arrayJson = 

  [NSJSONSerialization dataWithJSONObject:array options:0 error:NULL];  

   [arrayJson writeToFile:@"/Users/zhanghongyu/Desktop/task2" atomically:YES];  

}  

// JSON的反序列化  

NSArray *dataArray = 

[NSJSONSerialization JSONObjectWithData:arrayJson options:0 error:nil]; 

NSLog(@"%@",dataArray);


© 著作权归作者所有

上一篇: 数据安全 MD5
下一篇: 定时器NSTimer
卡奇匠
粉丝 22
博文 67
码字总数 68740
作品 0
海淀
程序员
私信 提问

暂无文章

以太坊中文文档翻译-区块

本文原文链接 点击这里获取Etherscan API 中文文档(完整版) 完整内容排版更好,推荐读者前往阅读。 区块(Blocks) 区块相关的 API,接口的参数说明请参考Etherscan API 约定, 文档中不单独...

Tiny熊
22分钟前
1
0
Linux 内核的一个问题

是virtio 驱动,但是没有启动 virtio-mmio virtio-mmio.0: Failed to enable 64-bit or 32-bit DMA. Trying to continue, but this might not work.....[ 1.047924] md: ... autorun......

MtrS
46分钟前
2
0
MySQL主从配置

17.1 MySQL主从介绍 17.2 准备工作 17.3 配置主 17.4 配置从 17.5 测试主从同步 一、 MySQL主从介绍

tobej
56分钟前
2
0
读书replay《博弈与社会》.1.20190526

前情 《美丽心灵》,一部讲数学家约翰·福布斯·纳什的电影,我第一次听到博弈理论就是在这部电影里。看过电影之后就一直想知道,博弈论究竟讲了什么。很久之后,20190417这天,我刷JD的购物...

wanxiangming
今天
2
0
iOS TableView层级结构剖析

首先上图 下面来分析一下tableView的层级结构 tableView的组成: 1.整个tableView有且仅有一个头部和尾部就是tableViewHeadView和tableViewFooterView2.tableView 可以有多个section,一个s...

HOrange
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部