标签:
iOS网络开发中,一般涉及到网络请求接口,都离不开关于json数据的处理。json数据作为各个前端和后台交互传递数据的格式,具有跨平台,轻型数据量,简洁易懂的优点。
json被广泛应用于Android,iOS,HTML5等于后台服务器交互的场景中,json作为一个跨平台的交互数据格式,必定有对象与二进制数据的转换,因为所有的不同平台之间传递信息识别的数据类型就是二进制。
iOS中的json数据处理核心就是json串与json对象之间的转换。json串与json对象都是基于iOS中NSObject类,在与后台的交互中,NSObject类与NSData类之间能互相转换,用于数据交互。
NSData与NSObject类之间的转换在iOS框架中很简单,也很常见,此处不再赘述,本篇着重讨论json串与json对象的转换。
#====================从后台接收数据的处理===================================
从后台接收到的数据一般为NSData类型的,可以直接用iOS框架提供的json解析类进行解析,直接得到的就是json对象。
//获取接口反馈的字符串数据,此处用的是MKNetworkKit网络库 NSString *responseString = [completedOperation responseString]; NSData *responseData = [responseString dataUsingEncoding:NSUTF8StringEncoding]; if (responseData != nil) { id jsonObject = nil; NSError *error = nil; jsonObject = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableLeaves error:&error]; if (error == ill) { //判断jsonObject为NSArray还是NSDictionary } else { //json解析出错处理 } }
如果后台返回的键值对中包含有json字符串类型,那么就要对json串进行解析处理
+ (id)jsonObjectWithString:(NSString *)string { NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]; NSError *error; id jsonObject = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&error]; if (error == nil) { return jsonObject; } else { DLog(@"%@",error.localizedDescription); return nil; } }
#====================前端传递给后台json格式的处理===================================
若在调用后台的接口时需要给后台传递json数据,一般是把json的NSArray货NSDictionary类型转换为NSString类型,然后可以选择键值对参数或NSData二进制格式传递给后台。
json集合对象转换为json串的代码
+ (NSString *)jsonStringWithObject:(id)jsonObj { NSString *jsonString = nil; NSError *error; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:jsonObj options:0 error:&error]; if (! jsonData) { DLog(@"Got an error: %@", error); } else { jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; } return jsonString; }
标签:
原文地址:http://www.cnblogs.com/csdnmc/p/5390212.html