Json

 JSON 简介

  • JavaScript Object Notation (JavaScript的对象表示法).
  • JSON 本质上,就是一个"特殊格式"的字符串.
  • JSON 是网络上用来传输数据使用最广泛的数据格式,没有之一.JSONXML更轻量级.
  • 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/NSDictionaryOC对象转换成二进制的过程.
  • 反序列化: 在从服务器接收到数据之后,将二进制数据转换成NSArray/NSDictionaryOC对象的过程.
  • 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
    • 所有的对象是 NSStringNSNumberNSArrayNSDictionary 或者 NSNull
    • 所有字典的 key 是 NSString
    • NSNumber 不是空或者无穷大
 

JSON解析_转模型

  • 解析JSON最终的目的是字典转模型.
  • NSJSONSerialization 解析完JSON之后.打印 json 类型的结果是 __NSCFDictionary,表示字典.

模型类声明

 

复制代码

复制代码

模型类实现

复制代码

复制代码

字典转模型

复制代码

复制代码

常见的 JSON 解析第三方框架

posted @ 2018-04-21 21:38  lalalala666  阅读(89)  评论(0编辑  收藏  举报