iOS中JSON解析与XML解析的区别

来源:互联网 时间:2017-01-22


1. JSON数据(NSData) -> OC对象(Foundation Object)
{} -> NSDictionary @{}
[] -> NSArray @[]
"jack" -> NSString @"jack"
10 -> NSNumber @10
10.5 -> NSNumber @10.5
true -> NSNumber @1
false -> NSNumber @0
null -> NSNull
JSON数据(NSData) -> OC对象(Foundation Object)

// 利用NSJSONSerialization类
+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;

NSJSONReadingOptions
NSJSONReadingMutableContainers = (1UL << 0)
创建出来的数组和字典就是可变

NSJSONReadingMutableLeaves = (1UL << 1)
数组或者字典里面的字符串是可变的

NSJSONReadingAllowFragments
允许解析出来的对象不是字典或者数组,比如直接是字符串或者NSNumber


OC对象(Foundation Object)-> JSON数据(NSData)
// 利用NSJSONSerialization类
+ (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;

格式化服务器返回的JSON数据
在线格式化:http://www.runoob.com/jsontool
将服务器返回的字典或者数组写成plist文件

2. XML的解析方式
SAX
大小文件都可以
NSXMLParser

DOM
最好是小文件
GDataXML

NSXMLParser的用法
创建解析器来解析
// 创建XML解析器
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
// 设置代理
parser.delegate = self;
// 开始解析XML(parse方法是阻塞式的)
[parser parse];

代理对象要遵守NSXMLParserDelegate协议,实现代理方法
/**
* 解析到某个元素的结尾(比如解析</videos>)
*/
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
}
/**
* 解析到某个元素的开头(比如解析<videos>)
*/
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
}
/**
* 开始解析XML文档
*/
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
}
/**
* 解析完毕
*/
- (void)parserDidEndDocument:(NSXMLParser *)parser
{
}

GDataXML
配置


Paste_Image.png

设置非ARC标记


Paste_Image.png

具体用法


Paste_Image.png
// 加载整个文档
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
// 获得根节点
doc.rootElement;
// 获得其他节点
[element elementsForName:@"video"];
// 获得节点的属性
[element attributeForName:@"name"].stringValue;



相关阅读:
Top