我在objective-c中编写了一个iphone应用程序,并希望从json获取数据。但我从url得到null,但是url是正确的,当我将url传递给浏览器时,我看到了json数据。这是我的IBAction方法:
- (IBAction)checkMobileNumber:(id)sender {
NSString *prefix = self.prefixTextField.text;
NSString *number = self.numberTextField.text;
NSString *url =[NSString stringWithFormat:@"http://data.e-gov.az/api/v1/IEGOVService.svc/CheckMobileProvider/%@/%@", prefix, number];
NSURL *jsonURL = [NSURL URLWithString:url];
@try {
[[[NSURLSession sharedSession] dataTaskWithURL:jsonURL completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
NSString* rawJSON = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSError *err;
self.checkMobile = [[CheckMobileProviderModel alloc] initWithString:rawJSON error:nil];
if (err) {
NSLog(@"Unable to initialize PublicPhotosModel, %@", err.localizedDescription);
}
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"%@", self.checkMobile.response);
//NSLog(@"%@", self.checkMobile.fault[@"faultString"]);
});
}] resume];
}
@catch (NSException * e) {
NSLog(@"Exception: %@", e);
}
}
这里有什么问题?有什么帮助吗?
编辑:
我的CheckMobileProviderModel.h
#import "JSONModel.h"
#import "FaultModel.h"
@protocol FaultModel
@end
@interface CheckMobileProviderModel : JSONModel
@property (strong, nonatomic) NSString *response;
@property (strong, nonatomic) NSArray<FaultModel, Optional>* fault;
@end
和FaultModel.h
#import "JSONModel.h"
@interface FaultModel : JSONModel
@property (strong, nonatomic) NSString* faultCode;
@property (strong, nonatomic) NSString* faultString;
@end
答案 0 :(得分:1)
不要将JSON转换为字符串:
NSString* rawJSON = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
转换它是一个对象,在本例中是一个NSDictionary
NSError = *error;
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error];
if (dict) {
NSLog(@"dict: %@", dict);
}
else {
NSLog(@"error: %@", error);
}
评论中的JSON格式很好:
{ "fault":{ "faultCode":1, "faultString":"Məlumat yoxdur" }, response":"Cari nömrə üçün mobil daşınma xidmətindən istifadə edilməmişdir" }
翻译:
{ "fault":{ "faultCode":1, "faultString":"there is no information" }, response":"The current number is not used for a mobile carriage service" }