JSON url响应为null

时间:2015-01-30 20:03:05

标签: ios objective-c iphone json nsurlsession

我在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

1 个答案:

答案 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"
}