Json
JSON 简介
JavaScript Object Notation
(JavaScript
的对象表示法).- JSON 本质上,就是一个"特殊格式"的字符串.
- JSON 是网络上用来传输数据使用最广泛的数据格式,没有之一.
JSON
比XML
更轻量级. - JSON 出身草根,是
Javascript
的子集,专门负责描述数据的一种格式. Javascript
是做网页开发使用的一种"脚本"语言.Javascript
&Java
没有任何关系!- 参考网站:http://www.w3cschool.cc
- JSON具有自我描述性,更易理解.
JSON 语法规则
- 数据以 key/value 值对表示
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
- 提示 : JSON描述对象的语法格式很像字典.但是,不是字典,仅仅是键值对的形式很像.
JSON 值
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在方括号中)
- 对象(在花括号中)
- null (空值)
JSON描述对象
-
新建工程,新建文件
demo.json
-
描述一个学生
JSON解析_NSJSONSerialization
- 问什么要解析JSON数据?
- 因为从服务器获取到的JSON数据都是二进制的,客户端无法直接使用,就需要将二进制的JSON数据转换成客户端可以直接使用的OC对象.
- 注意 : JSON形式的字符串客户端也无法直接使用.还是需要将其转换成OC对象.
序列化 & 反序列化
- 序列化: 在向服务器发送数据之前,将
NSArry
/NSDictionary
等OC对象
转换成二进制的过程. - 反序列化: 在从服务器接收到数据之后,将二进制数据转换成
NSArray
/NSDictionary
等OC对象
的过程. - JSON解析也叫做JSON反序列化
JSON解析 & JSON反序列化
- 加载
demo.json
文件中的JSON数据
JSON解析 & JSON反序列化 的核心部分
总结
- 打印
json
类型的结果是__NSCFDictionary
,表示字典. -
NSJSONSerialization
自动将二进制形式的JSON字符串
解析成了字典. -
JSON解析返回的对象是
字典
或数组
,是根据原始数据是由{}
或者[]
括起来决定的.
- 如果JSON数据中有中文,输出的是经过Unicode编码的内容,无法识别.
- 解析JSON最终的目的?
JSON解析_options
options参数说明
- NSJSONReadingOptions
选项 | 说明 |
---|---|
NSJSONReadingMutableContainers = (1UL << 0) |
容器可变 |
NSJSONReadingMutableLeaves = (1UL << 1) |
叶子可变 |
NSJSONReadingAllowFragments = (1UL << 2) |
顶级节点可以不是 NSArray 或者 NSDictionary,但必须是有效的JSON内容,比如字符串必须带引号 |
- 在实际开发中,获得网络的数组或者字典之后,通常会做字典转模型!反序列化的结果是否可变并不重要
NSJSONSerialization 类
- 专门负责在
JSON
和Foundation
对象直接转换的类 - 可以转换成
JSON
的Foundation
对象(即能够做JSON序列化的对象)需要具备以下条件:- 顶级节点是
NSArray
或者NSDictionary
- 所有的对象是
NSString
,NSNumber
,NSArray
,NSDictionary
或者NSNull
- 所有字典的
key
是NSString
NSNumber
不是空或者无穷大
- 顶级节点是
JSON解析_转模型
- 解析JSON最终的目的是字典转模型.
- NSJSONSerialization 解析完JSON之后.打印
json
类型的结果是__NSCFDictionary
,表示字典.
模型类声明
模型类实现
字典转模型
常见的 JSON 解析第三方框架
- JSONKit(最快)
- SBJson
- TouchJSON
- 说明 : 以上三个框架的性能依次降低
- 参考博客:https://blog.csdn.net/hanxujie00/article/details/52050433