我已经看到 iOS 中的大多数数据都是 JSON 或 XML 格式的。我很想知道是否有任何第三方库或包装类可以相应地处理这两种类型的数据和响应。我知道我可以将 JSONKit 用于 JSON 数据,将 NSXMLParser 用于 XML。但我正在寻找一个同时解决这两个问题的人。
有没有这样的包装?
欢迎任何建议和指导。谢谢。
我认为它支持 JSON /XML,只是你能改变一些行。
NSString *str1=@"type url";
NSString *poststr1 = [NSString stringWithFormat:@"%@",str1];
NSString *posturl1=[NSString stringWithFormat:@" your url json/xml"];
// NSLog(@"city url name %@",posturl1);
NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"%@",posturl1]];
NSData *postData1 = [poststr1 dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData1 length]];
NSMutableURLRequest *request =[[[NSMutableURLRequest alloc] init] autorelease];
[request setHTTPBody:postData1];
[request setURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
NSError *error;
NSURLResponse *response;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
// NSString *data=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];//this line supprted to json
NSDictionary* json = [NSJSONSerialization
JSONObjectWithData:urlData
options:kNilOptions
error:&error];//this line supported to xml
NSLog(@"json %@",json);
//NSDictionary*results = [data JSONValue];//this line supported to JSON
//NSLog(@"results json----->%@",results);
我为 json 创建了一个包装类。在那里,我创建了下面给出的一种方法,我认为它会对你有所帮助。
解析方法:
-(void)jsonDeserialize:(NSString *)key fromDict:(id)content completionHandler:(void (^) (id parsedData, NSDictionary *fromDict))completionHandler{
if (key==nil && content ==nil) {
completionHandler(nil,nil);
}
if ([content isKindOfClass:[NSArray class]]) {
for (NSDictionary *obj in content) {
[self jsonDeserialize:key fromDict:obj completionHandler:completionHandler];
}
}
if ([content isKindOfClass:[NSDictionary class]]) {
id result = [content objectForKey:key];
if ([result isKindOfClass:[NSNull class]] || result == nil) {
NSDictionary *temp = (NSDictionary *)content;
NSArray *keys = [temp allKeys];
for (NSString *ikey in keys) {
[self jsonDeserialize:key fromDict:[content objectForKey:ikey] completionHandler:completionHandler];
}
}else{
completionHandler(result,content);
}
}
}
方法调用:
NSData *content = [NSData dataWithContentsOfFile:[[NSBundle mainBundle]pathForResource:@"Sample" ofType:@"json"]];
NSError *error;
//获取序列化的json数据...
id dictionary = [NSJSONSerialization JSONObjectWithData:content options:NSJSONReadingMutableContainers error:&error];
//获取名为GetInfo的键的数据
[self jsonDeserialize:@"GetInfo" fromDict:dictionary completionHandler:^(id parsedData, NSDictionary *fromDict) {
NSLog(@"%@ - %@",parsedData,fromDict);
}];
AFNetworking 将两者兼得,并享有良好的声誉,例如,请参阅Ray Wenderlich站点,该站点也有许多其他有用的信息。