iOS开发系列-JSON解析
概述
JOSN是一种轻量级的数据格式,一般用于数据交互。服务器返回给客户端,一般都是JSON格式或者XML格式。
JSON的格式:
{"name" : "CoderHong", "age": "12"}
{"names" : ["CoderHong", "Rose", "Jake"]}
标准的JSON格式建议使用key必须双引号,如果使用单引号有些第三方框架解析过程会出现问题。
JSON解析
JSON在转换过程中JSON中的数据类型都会转成OC对象。JSON数据类型与OC对象的的映射表。

JSON解析方案
在iOS 5.0之前,开发中使用有很多的第三方框架:JSONKit、SBJson、TouchJSON(性能从左到右依次降低)。
在iOS 5.0之后,苹果提供了原生 NSJSONSerialization。目前性能最好,开发建议使用。
NSJSONSerialization常见方法
反序列化
+ (nullable id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;
1. 参数data必须是可以反序列化的 并且返回error信息

2. 参数data不能为nil,否者抛出异常

返回值为OC的id类型。第二个参数是一个枚举取值为:
- NSJSONReadingMutableContainers 返回的是一个可变的对象(容器)
- NSJSONReadingMutableLeaves 返回的是一个可变的对象(容器),并且里面的小节点容器也是可变的
- NSJSONReadingAllowFragments 允许最外面返回的不是必须是字典或者数组可以直接返回NSNumber。
如果服务端返回标准的JOSN数据,并且不要求返回的是可变数组或字典传递kNilOptions效率最高。
序列化
将OC中的对象(字典,数组)转成JSON字符串
+ (nullable NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;
第一个参数OC中的字典或数组对象。第二个参数是一个枚举值,取值有NSJSONWritingPrettyPrinted、NSJSONWritingSortedKeys,主要用于在控制台数据的格式。可以传递NSJSONWritingPrettyPrinted输出的JSON字符串是有数据格式的。
注意:如果该方法传入的obj不是有效的JSON会内部会抛出异常,程序奔溃

因此在调用方法先使用NSJSONSerialization类方法做检查,避免奔溃。
实例:
NSDictionary *dict = @{@"name": @"CoderHong", @"age": @(12)};
BOOL isValid = [NSJSONSerialization isValidJSONObject:dict];
if(isValid){
NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingSortedKeys error:nil];
NSString *jsonStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
字典转模型框架
字典转模型根据时间顺序常用的框架 Mantle、 JOSNModel、MjExtension。
JSONModel框架使用时需要工程中的模型继承JOSNModel。
MJExtension框架使用时不需要工程中的模型继承,性能最好。
iOS开发系列-JSON解析的更多相关文章
- iOS开发系列--网络开发
概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博.微信等,这些应用本身可能采用iOS开发,但是所有的数据支撑都是基于后台网络服务器的.如今,网络编程越来越普遍,孤立的应用通常是没有生命力 ...
- iOS开发系列文章(持续更新……)
iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...
- iOS开发系列--数据存取
概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation框架的文章中提到归档.plist文件存储, ...
- iOS开发系列--让你的应用“动”起来
--iOS核心动画 概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建 ...
- iOS开发系列--并行开发其实很容易
--多线程开发 概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的, ...
- 【转】iOS开发系列--数据存取
原文: http://www.cnblogs.com/kenshincui/p/4077833.html#SQLite 概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储 ...
- iOS开发系列之app的一天
本文主要讲述我对 iOS 开发的一些理解,希望能通过 app 从启动到退出,将一些的知识整合起来,形成一条知识链,目前涉及到的知识点有 runloop.runtime.文件存储.界面布局.离线推送.内 ...
- iOS开发系列--Swift语言
概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...
- iOS开发系列--App扩展开发
概述 从iOS 8 开始Apple引入了扩展(Extension)用于增强系统应用服务和应用之间的交互.它的出现让自定义键盘.系统分享集成等这些依靠系统服务的开发变成了可能.WWDC 2016上众多更 ...
随机推荐
- delphi 压缩
DELPHI 通过ZLib来压缩文件夹 unit Unit1; interface uses ZLib, Windows, Messages, SysUtils, Variants, Classes, ...
- zookeeper3台机器集群环境的搭建
三台机器zookeeper的集群环境搭建 Zookeeper 集群搭建指的是 ZooKeeper 分布式模式安装. 通常由 2n+1台 servers 组成. 这是因为为了保证 Leader 选举(基 ...
- POJ3241 最小曼哈顿距离生成树 - 真有趣哇
目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 Catalog Problem:Portal传送门 原题目描述在最下面. 给你n个坐标, ...
- 基于Netty的RPC架构学习笔记(六):netty5案例学习
文章目录 netty5服务端入门案例 netty5客户端入门案例 单客户端多连接程序 知识普及 线程池原理图 对象池原理图 对象组原理图 结论 理论结合实际 开干开干 总结 netty5服务端入门案例 ...
- idea 设置默认maven auto import,不需要每次都弹出
1 2 误区 从这里点进去进行设置,或者每次打开项目右击下方的 auto impot都是不对的.
- ParameterizedThreadStart task
using System;using System.Diagnostics;using System.Threading;using System.Threading.Tasks; namespace ...
- SpringAOP中的注解配置
使用注解实现SpringAOP的功能: 例子: //表示这是被注入Spring容器中的 @Component //表示这是个切面类 @Aspect public class AnnotationHan ...
- elasticsearch实现读写分离
简介 今天我们不讲三国,我们讲一讲elasticsearch(以下简称ES)读写分离,这是个好东西,全文索引的时候使用它贼得劲,对elasticsearch索引原理不太清楚的,请自行查找相关的文章 这 ...
- jenkins自动化部署jar包(2)
1.自动化部署流程: svn代码-----jenkins------linux运行 环境: 我这里为了测试:svn,和linux放在阿里云上面.jenkins放在本地windos电脑上运行的 2.下载 ...
- HTML_标签
<!--HTML:1.概念:最基础的网页开发语言Hyper Text Markup Language 超文本标记语言超文本:超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本. ...