JSON url 响应为空
JSON url response null
我在 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
不要将 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"
}
我在 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
不要将 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" }