网络请求之JSON解析
<一>JSON的基本知识
- 什么是JSON:JSON的全称是JavaScript Object Notation(JavaScript对象符号),是目前使用最广泛的数据交换格式,具有跨平台.跨语言的优势,而且对照XML,JSON作为数据传输格式时,数据传输量更小,JSON数据格式既适合人来进行读写,又适合计算机本身解析和合成
- JSON的数据结构:
- 由key-value对组成的数据结构,这种数据结构在不同的语言中有不同的实现,例如:在JavaScript中是一个对象,在Objective-C中是一种NSDictionary对象,在C语言中则是一个struct,在其他语言中可能对应其他的结构
- 有序集合,这种数据结构在不同的语言中可能有NSArray,vector,数组和序列等实现
- JSON网址:http://www.json.org
<二>JSON-OC数据类型对照表
JSON | OC |
大括号{} | NSDictionary |
中括号[] | NSArray |
双引号"" | NSString |
数字 1, 2.3 | NSNumber |
<三>Objective-C中的JSON解析与生成:(JSON->Objective-C Objectivew->JSON)
在iOS5之后,iOS SDK提供了NSJAONSerialization类来解析和生成JSON,但在有些时候为了兼容以前的版本或者寻求更强大的功能,我们会选择第三方库来处理JSON,常见的第三方库有SBJson, JSONKit, 并有模型处理类库例如:MJExtension,JSONModel,YYModel来帮助JSON解析
<四>使用NSJSONSerialization来处理JSON数据
NSJSONSerailization 提供了如下类方法来支持JSON解析和生成
+ JSONObjectWithData: options: error: 该方法负责将制定的NSData中包含的JSON数据转换为Obj-C对象
+ JSONObjectWithStream: options: error: 该方法负责将制定的输入流中包含的JSON数据转换为Obj-C对象
+ dataWithJSONObject: options: error: 该方法负责将制定的JSON对象转换为NSData对象
- + writeJSONObject: toStream: options: error: 该方法负责将制定的JSON对象转换为JSON字符串输出到制定的输出流中
options:
NSJSONReadingMutableContainers = (1UL << 0), 所有节点可变
NSJSONReadingMutableLeaves = (1UL << 1),叶子节点可变
NSJSONReadingAllowFragments = (1UL << 2) 根节点可变
- + isValidJSONObject: 该方法用于判断制定的对象是否可以转换为JSON数据
由于NSJSONSerailization并不能把任意的对象转换为JSON数据,所以提供了类方法 isValidJSONObject 用来判断制定对象是否可以转换为JSON数据
NSJSONSerailization只能讲满足如下条件的对象转换为JSON对象
- 顶层对象只能是NSArray或者NSDictionary
- 集合中包含的对象只能是NSString,NSNumber,NSArray,NSDictionary或NSNull对象
- 所有NSDictionary的key只能是NSString
- NSNumber包装的数值不能是NaN或Infinity
<五>使用JSONKit来处理JSON数据
JSONKit的github地址:
JSONKit 提供了如下类方法来支持JSON解析和生成
- 用于解析NSString类型的JSON数据的分类
@interface NSString (JSONKitDeserializing)
- (id)objectFromJSONString;
- (id)objectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags;
- (id)objectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error;
- (id)mutableObjectFromJSONString;
- (id)mutableObjectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags;
- (id)mutableObjectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error;
@end
2. 用于解析NSData类型的JSON数据的分类
@interface NSData (JSONKitDeserializing)
// The NSData MUST be UTF8 encoded JSON.
- (id)objectFromJSONData;
- (id)objectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags;
- (id)objectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error;
- (id)mutableObjectFromJSONData;
- (id)mutableObjectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags;
- (id)mutableObjectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error;
@end
3. JSONKit 为NSDictionary,NSArray,NSString提供了将Obj-C对象转换为JSON数据的方法
- (NSData *)JSONData;
- (NSString *)JSONString;
<六>使用SBJson来处理JSON数据
SBJson的github地址:
最新文章
- Tomcat启动,不能加载项目问题。
- 嵌入式linux学习笔记1—内存管理MMU之虚拟地址到物理地址的转化
- MySQL如何发型不乱的应对半年数十TB数据增量
- BestCoder8 1001.Summary(hdu 4989) 解题报告
- ELK&mdash;&mdash;Elasticsearch 搭建集群经验
- SQL server 表之间的关系生成图
- win7远程链接ubuntu 桌面版
- 用状态机STATE MACHINE实现有选择的文件转换
- GWT(Google Web Tookit) Eclipse Plugin的zip下载地址(同时提供GWT Designer下载地址)
- css初始化值
- PHP工厂模式
- CSS3动画效果之animation
- 将一个javaWeb应用跑在Docker里
- linux下安装kubectl
- kubernetes云平台管理实战: 高级资源deployment-滚动升级(八)
- 从零自学Java-8.创建第一个对象
- DP-动态规划算法实例:拿糖果问题
- 将16进制的颜色转为rgb颜色
- AX_Args
- linq not in 查询