本文主要是介绍ios中使用 NSJSONSerialization对 json数据的解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
ios5中apple增加了解析JSON的api——NSJSONSerialization。通过该类,我们可以完成JSON数据与NSDictionary和NSArray之间的转化。网上已经有人做过测试,NSJSONSerialization在效率上完胜SBJSON、TouchJSON、YAJL、JSONKit、NextiveJson。
NSJSONSerialization提供了将JSON数据转换为Foundation对象(一般都是NSDictionary和NSArray)和Foundation对象转换为JSON数据(可以通过调用isValidJSONObject来判断Foundation对象是否可以转换为JSON数据)。
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(网络传输速率)。
iOS中从服务器获得json数据是需要解析转换为Foundation对象(一般都是NSDictionary和NSArray)才能使用,同样的Foundation对象也是可以转换为json数据的,这时候使用NSJSONSerialization就非常的方便了。
官方为我们提供的解析JSON数据的类NSJSONSerialization的几个方法:
+ (BOOL)isValidJSONObject:(id)obj;
判断一个数据对象是否可以转化为JSON数据
+ (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;
将JSON数据写为NSData数据,其中opt参数的枚举如下,这个参数可以设置,也可以不设置,如果设置,则会输出视觉美观的JSON数据,否则输出紧凑的JSON数据。
1 2 3 | typedef NS_OPTIONS(NSUInteger, NSJSONWritingOptions) { NSJSONWritingPrettyPrinted = (1UL << 0) } |
+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;
这个方法是解析中数据的核心方法,data是JSON数据对象,可以设置一个opt参数,具体用法如下:
1 2 3 4 5 6 7 8 | typedef NS_OPTIONS(NSUInteger, NSJSONReadingOptions) { //将解析的数组和字典设置为可变对象 NSJSONReadingMutableContainers = (1UL << 0), //将解析数据的子节点创建为可变字符串对象 NSJSONReadingMutableLeaves = (1UL << 1), //允许解析对象的最上层不是字典或者数组 NSJSONReadingAllowFragments = (1UL << 2) } |
+ (NSInteger)writeJSONObject:(id)obj toStream:(NSOutputStream *)stream options:(NSJSONWritingOptions)opt error:(NSError **)error;
将JSON数据写入到输出流,返回的是写入流的字节数
+ (id)JSONObjectWithStream:(NSInputStream *)stream options:(NSJSONReadingOptions)opt error:(NSError **)error;
从输入流读取JSON数据
json数据转换为Foundation对象
- -(void) parseJsonData:(NSData *)data
- {
- //将NSString转化为NSData 拿到的json串需要先转化为NSData类型 才可以进行解析 !!!
- NSError *error;
- NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
- if (json == nil) {
- NSLog(@"json parse failed \r\n");
- return;
- }
- NSArray *songArray = [json objectForKey:@"song"];
- NSLog(@"song collection: %@\r\n",songArray);
- _song = songArray;
- self.songIndex = 0;
- NSDictionary *song = [songArray objectAtIndex:0];
- NSLog(@"song info: %@\t\n",song);
- }
Foundation对象转换为json数据
- View Code
- NSDictionary *song = [NSDictionary dictionaryWithObjectsAndKeys:@"i can fly",@"title",@"4012",@"length",@"Tom",@"Singer", nil];
- if ([NSJSONSerialization isValidJSONObject:song])
- {
- NSError *error;
- ///将JSON数据写为NSData数据
- NSData *jsonData = [NSJSONSerialization dataWithJSONObject:song options:NSJSONWritingPrettyPrinted error:&error];
- NSString *json =[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
- NSLog(@"json data:%@",json);
- }
[jsonString
//
- (id)toArrayOrNSDictionary:(NSData
}
#import
@implementation
-(id)JSONValue;
{
}
@end
#import
@implementation
-(NSData*)JSONString;
{
}
@end
这篇关于ios中使用 NSJSONSerialization对 json数据的解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!