JSON/XML解析以及加密

关于响应数据的思考

服务器给我们返回的数据需要有一定的格式,使用一种结构将数据组织起来,方便传输和使用

之前返回数据格式

2+登录成功

获取好友,每个好友包含名字、年龄、性别、地址

李四+18+男+朝阳区

拉取好友列表

李四+18+男+朝阳区#
李四+18+男+朝阳区#
李四+18+男+朝阳区

如果拉取的好友列表中有好友的好友列表呢

可能就需要很多个符号了

在数据中间加符号其实就是为了让我们的数据变得更有格式,有条理,方便服务器和客户端进行交流

JSON

JSON简介

JSON数据传输格式:全称JavaScript Object Notation,是基于javascript的轻量级的数据交换格式

JSON值类型

JSON中数据类型  对应  OC中类型
数字(整数或浮点数)   NSNumber
字符串(在双引号中)	 ""
逻辑值(true 或 false)NSNumber
数组(在方括号中)	  NSArray
对象(字典 在花括号中) NSDictionary
null                  [NSNull null] 注意在判断值是否为空时使用此种方式

JSON语法

JSON 语法是JavaScript对象表示语法的子集。

数据在 名称/值 对中  (键值对)
数据由逗号分隔			,
花括号表示对象(OC中的字典){}
方括号表示数组			[]

JSON 名称/值对 (键值对)
键/值对组合中的名称(键)写在前面(在双引号中),值写在后面(可以是JSON值支持的数据类型),中间用冒号隔开:

{"girlfriends" : [{"name":"林志玲", "age":"18"}, {"name":"林志颖", "age":"28"}, {"name":"林志炫", "age":"38"}, {"name":"阿莲", "age":"16"}], "girlfriendscount": 4}

JSON解析

NSJSONSerialization类

JSON转字典

​ JSON转字典

字典转JSON

​ 字典转JSON

解析注意事项

NULL nil Nil NSNull的区别:

NULL C语言中的 表示空指针
nil OC中的 空指针 一般用于对象的空
Nil OC中的 空指针 一般用于类的空
NSNull 空类 该类创建的对象为空对象 表示占位 对象中什么也没有

工具网站

在线校验json格式
http://json.parser.online.fr
http://www.json.cn

XML

XML简介

XML数据传输格式

XML 全称Extensive Markup Language 可扩展标记语言
可扩展标记语言是一种很像超文本标记语言的标记语言。它的设计宗旨是传输数据,而不是显示数据(HTML)。它的标签没有被预定义,您需要自行定义标签。例如

<age>123</age>  
<name>小明</name> 

它被设计用来传输(XML格式的数据)和存储数据(XML文件),其焦点是数据的内容。
超文本标记语言被设计用来显示数据,其焦点是数据的外观。
超文本标记语言旨在显示信息,而XML旨在传输信息。

XML范例

<friends>
<friend>
	<name>小明</name>
	<age>18</age>
	<location>北京</location>
</friend>
<friend>
	<name>小明2</name>
	<age>19</age>
	<location>上海</location>
</friend>
<friend>
	<name>小明3</name>
	<age>20</age>
	<location>广州</location>
</friend>
</friends>

XML解析

把XML标签中内容取出来的过程 我们就称为解析

XML解析分为两种方式:SAX、DOM

SAX解析

SAX解析方式:它是事件驱动模型,解析XML文档时从开始每遇到一个开始或者结束标签、属性或者一条指令时,解析器就产生一个事件进行相应的处理,一边读取XML文档一边处理,不必等整个文档加载完才采取措施,当在读取解析过程中遇到需要处理的对象,会发出通知进行处理

iOS中系统类使用的是SAX解析方式

  • 创建解析器 NSXMLParser
  • 设置代理 NSXMLParserDelegate
    • 开始解析文档
    • 碰到开始标签
    • 找到标签内容
    • 遇到结束标签
    • 解析结束
    • 解析遇到错误 停止解析
  • 开始解析 parse

注意事项

1、解析需要一个可变字符串 该字符串Property描述为属性时不要copy
2、在解析代理方法 发现标签中的内容 要将标签中的内容追加在可变字符串后
3、将可变字符串内容置为空 不可以用self.mutableString = @“” 使用其他两种方式
新建对象 self.mutableString = [NSMutableString string];
将可变字符串内容置为空[self.mutableString setString:@“”];

4、使用model类保存数据 该model的string属性要用copy 因为NSString有可变子类

SAX解析的封装

  1. 构建父类、重新整理代码结构
    1. 将XML解析代码抽离出来,构建一个类YKUserXMLParser
    2. 抽象出父类,将共有的部分抽离出来,写到父类中
  2. 使用KVC赋值

DOM解析

DOM解析方式:它必须一次性读入整个XML文档,完成DOM树的构造,在处理规模较大的XML文档时就很耗内存,占用资源较多,读入整个XML文档并构建一个驻留内存的树结构(节点树),通过遍历树结构可以检索任意XML节点,读取它的属性和值。

第三方库:GDataXML

使用步骤:

  • 从http://code.google.com/p/gdata-objectivec-client/downloads/list下载“gdata-objective-c client library.”
  • 解压缩文件,找到Source\XMLSupport,并且将其中的GDataXMLNode.h 和 GDataXMLNode.m文件拖到项目中
  • 在需要调用GDataXML的代码文件头部,加入:import “GDataXMLNode.h”
  • 选中项目,选中“Build Settings”标签页,将Build Settings页中,顶部的“Basic”标签切换到“All”,找到“Paths\Header Search Paths”项,并添加“/usr/include/libxml2”到列表中
  • 注意GDataXML只能在非ARC环境下使用,如果在ARC的工程中需要添加标记-fno-objc-arc
  • 找到“Linking\Other Linker Flags”项,并添加“-lxml2”到列表中

库中主要有3个类
GDataXMLDocument XML文档对象
GDataXMLElement 元素、即标签
GDataXMLNode 属性

  1. 根据data构建XML文档对象
  2. 获取XML文档的根节点
  3. 取出所有user标签
  4. 遍历user数组,分别取出user中的标签

加密

Base64

Base64加密实际采用的Base64编码具有不可读性的特性,但严谨角度来说它不算加密,

它是可逆的

MD5

MD5,又名摘要算法,哈希算法

http://www.cmd5.com

其实MD5是不可逆的 但也不是绝对安全的 是可以解密成功的
使用以下方案

  1. 加密过后的字符串前后各加一段字符串

    原字符串:abc 加密后MD5:132sdfsflfjlsf123

  2. 对加密后的字符串进行一些其他操作

    原字符串:abc 加密后MD5:sdfsflfjlsf

    例如1、将加密后字符串中的m全部替换成d

    ​ 2、将前几位和后几位对调

posted @ 2016-12-15 11:04  听歌学唱  阅读(1361)  评论(0编辑  收藏  举报