负载:
在服务的请求响应事务中交换的数据。如在POST请求中,负载指请求体。
负载的数据格式:
(1)XML: 可扩展标记语言,用于编码和组织数据。XML文档包含标记和内容。 标记由标签、属性和元素组成。标签包括起始标签、结束标签、空元素标签(也叫自关闭标签)。属性指起始标签或结束标签中的键值对,提供了元素的附加信息。元素是标签、属性和内容的集合。包含起始标签与结束标签或只包含空元素标签,起始标签与结束标签之间的就是内容。内容可以包好标记以及其他元素,如下例:
<person>
<firstName>Nathan</firstName>
<lastName>Jones</lastName>
<emailAddress primary='true'>email@domain.com</emailAddress>
<noContact medium='email'/>
</person>
(2)JSON :JavaScript对象符号,用于交换结构化信息的轻量级数据格式。JSON支持的数据类型以及与之关联的格式规则:
- 数字:无双引号
- BOOL:无双引号,true/false
- 数组:[1,2,3,…]
- 对象:{“key”:”value”, ….}, NSDictionary
- Null:无双引号
如:
{
"person": {
"firstName":"Nathan",
"lastName":"Jones",
"email":{
"emainAddress":"email@domain.com",
"primary":true
},
"noContact":"email"
}
}
(3)HTML:超文本标记语言,用于组织网页上的数据。HTML文档包含doctype定义(DTD)、元素、属性、数据类型与字符实体引用。与XML文档区别在于HTML文档用于预先定义好的标签和属性名的集合。
doctype位于html文档的第一行,告诉浏览器当前页面使用的是HTML规范的哪个版本。html5中可以自定义属性,这些属性以data-为前缀,并且不包含大写字符。自定义属性旨在存储不适合现有属性存储的特定于应用的数据。>
<!Document html> // 告诉文档使用HTML5编写
<html>
<head>
<title>Person:Nathan Jones</title>
</head>
<body>
<div id='firstName'>Nathan</div>
<div id='lastName'>Jones</div>
<div id='emailAddress' data-primary='true'>email@domain.com</div>
<div id='noContact' data-medium='email'/>
</body>
</html>
解析响应负载
- XML:解析XML需要理解两种解析方式。
(1)Simple API For XML (SAX):顺序解析XML的元素,一次处理一个元素。
(2)Document Object Model(DOM):将整个XML文档以可遍历的结点树的形式读取在内存中。
通过NSXMLParser和libxml两种进行解析
-
- **HTML** > 利用 libxml2.dylib进行解析 - **JSON** > 通过NSJSONSerialization,配置解析方式的参数含义: >
- (1)NSJSONReadingAllowFragments:告诉解析器处理既不是NSArray又不是NSDictionary的顶层对象。可以处理{“user”:null}简单的JSON结构的转换;
- (2)NSJSONReadingMutableContainers:生成NSMutableArray和NSMutableDictionary对象;
-
(3)NSJSONReadingMutableLeaves:生成NSMutableString对象。
“`
生成响应负载
XML
通过libxml/xmlwriter接口生成XML
JSON
通过NSJSONSerialization的dataWithJSONObject:options:error:与writeJSONObject:toStream:options:error:生成,在调用该方法之前,先调用isValidJSONObject:来验证尝试转换的对象是否可以转换成JSON,能转换成JSON的对象必须满足以下规则:
(1) 顶层对象必须是NSArray或NSDictionary
(2) 所有的对象必须是NSString、NSNumber、NSArray、NSDictionary或NSNull
(3) 所有的NSDictionary键必须是NSString
(2) NSNumber的值不能为NaN或无穷大配置解析方式的参数:
NSJSSONWritingPrettyPrinted,通过添加空白来生成更易读的JSON,不指定该选项则会生成尽可能紧凑的JSON。