熟悉的网络json转换库
如:TouchJSON、SBJSON、JSONKit等等,但是NSJSONSerialization是苹果自家开发,所以性能方面的话应该就不用说了,毕竟是亲生的。
常用方法:
1、json数据转OC对象
+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;
2、OC对象数据转json
+ (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;
参数选择:
typedef NS_OPTIONS(NSUInteger, NSJSONReadingOptions) {
NSJSONReadingMutableContainers = (1UL << 0),
NSJSONReadingMutableLeaves = (1UL << 1),
NSJSONReadingAllowFragments = (1UL << 2)
} NS_ENUM_AVAILABLE(10_7, 5_0);
//NSJSONReadingMutableContainers:返回可变容器,NSMutableDictionary或NSMutableArray。
//NSJSONReadingMutableLeaves:返回的JSON对象中字符串的值为NSMutableString,目前在iOS 7上测试不好用,应该是个bug,参见: [http://stackoverflow.com/questions/19345864/nsjsonreadingmutableleaves-option-is-not-working](http://stackoverflow.com/questions/19345864/nsjsonreadingmutableleaves-option-is-not-working)
//NSJSONReadingAllowFragments:允许JSON字符串最外层既不是NSArray也不是NSDictionary,但必须是有效的JSON Fragment。例如使用这个选项可以解析 @“123” 这样的字符串。参见: [http://stackoverflow.com/questions/16961025/nsjsonserialization-nsjsonreadingallowfragments-reading](http://stackoverflow.com/questions/16961025/nsjsonserialization-nsjsonreadingallowfragments-reading)
//OC对象数据转json
typedef NS_OPTIONS(NSUInteger, NSJSONWritingOptions) {
NSJSONWritingPrettyPrinted = (1UL << 0) //输出json格式化
} NS_ENUM_AVAILABLE(10_7, 5_0);
//不想格式化可以传kNilOptions
1、JSON转NSDictionary
/*
JSON转字典
*/
-(void)jsonToDict{
//创建URL对象
NSURL *url = [NSURL URLWithString:@"http://192.168.1.0:8080/login?username=LitterL&pwd=123&type=JSON"];
//创建请求
NSURLRequest *request = [[NSURLRequest alloc]initWithURL:url];
//发送异步请求
[NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc]init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
/*
第一个参数:要解析的二进制数据
第二个参数:解析json的选项
NSJSONReadingMutableContainers = (1UL << 0), 最外层是可变的字典和数组
NSJSONReadingMutableLeaves = (1UL << 1), 里面的字符串也是可变的,iOS7
NSJSONReadingAllowFragments = (1UL << 2) 最外层既不是字典也不是数组
kNilOptions为什么都没有
第三个参数:错误信息
*/
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];
NSLog(@"字典为--------%@",dict);
NSLog(@"字典中的success为-------------%@",dict[@"success"]);
}];
}
2、NSDictionary转JSON
/*
字典转JSON
*/
-(void)DictToJson{
//1、创建一个NSDictionary
NSDictionary *dict = @{
@"Name":@"LitterL",
@"Age":@"20"
};
//2、判断是否能转为Json数据
BOOL isValidJSONObject = [NSJSONSerialization isValidJSONObject:dict];
if (isValidJSONObject) {
/*
第一个参数:OC对象 也就是我们dict
第二个参数:
NSJSONWritingPrettyPrinted 排版
kNilOptions 什么也不做
*/
NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:nil];
//打印JSON数据
NSLog(@"%@",[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);
}
}
这里的话是排版了的
这里的话是没有排版的,需更改:(大家自行对照)
NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:kNilOptions error:nil];