[英]iOS Convert NSData to NSDictionary returns nil?
In My code I want to convert NSData to NSDictionary but it returns nil I don't know what mistake I made,I Used NSJSONSerialization for convert data to dictionary, The NSData was received from server response. 在我的代码中,我想将NSData转换为NSDictionary,但返回nil我不知道我犯了什么错误,我使用NSJSONSerialization将数据转换为字典,从服务器响应接收到NSData。
Here I show my Full code what I am trying. 在这里,我显示我的完整代码我正在尝试什么。
-(void)SendPushNotification:(NSString*)getUrl :(NSMutableDictionary *)getData withCompletionBlock:(void(^)(NSDictionary *))completionBlock
{
NSError *error;
NSLog(@"dict val: %@",getData);
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:getData options:NSJSONWritingPrettyPrinted error:&error];// Pass 0 if you don't care about the readability of the generated string
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSData *postData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSString *postLengthas = [NSString stringWithFormat:@"%lu",(unsigned long)[postData length]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:getUrl]
cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:100.0];
NSString *chkRegDevice= [[NSUserDefaults standardUserDefaults] stringForKey:@"bearer"];
NSString *strfds=[NSString stringWithFormat:@"bearer %@",chkRegDevice];
[request setHTTPMethod:@"POST"];
[request setValue:postLengthas forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:strfds forHTTPHeaderField:@"Authorization"];
[request setHTTPBody:postData];
NSURLSessionConfiguration *configg=[NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession*sessionn=[NSURLSession sessionWithConfiguration:configg delegate:nil delegateQueue:[NSOperationQueue mainQueue]];
NSURLSessionDataTask *taskk=[sessionn dataTaskWithRequest:request completionHandler:^(NSData *data,NSURLResponse *responce,NSError *error){
if(error)
{
NSLog(@"%@", [error localizedDescription]);
completionBlock(nil);
}else{
NSError *jsonError;
NSString *clientDetail = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"clientDetail: %@", clientDetail);
NSData *objectDataaaaa = [clientDetail dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:objectDataaaaa options:NSJSONReadingMutableContainers error:&jsonError];
NSLog(@"json %@",json);
if (![clientDetail isEqualToString:@"Object reference not set to an instance of an object."]) {
if (completionBlock) {
completionBlock(json);
}
}
else
{
completionBlock(nil);
}
}
}];
[taskk resume];
}
Here the following response I get to convert NSData to NSString. 在这里,我得到以下响应,将NSData转换为NSString。
"{\\"multicast_id\\":8856529321585625357,\\"success\\":1,\\"failure\\":0,\\"canonical_ids\\":0,\\"results\\":[{\\"message_id\\":\\"0:1534479035021563%1dbdaa031dbdaa03\\"}]}"
“{\\” multicast_id \\ “:8856529321585625357,\\” 成功\\ “:1,\\” 失败\\ “:0,\\” canonical_ids \\ “:0,\\” 结果\\ “:[{\\” MESSAGE_ID \\ “:\\” 0:1534479035021563%1dbdaa031dbdaa03 \\ “}]}”
Pass NSData object( data
) directly to JSONObjectWithData
. 将NSData对象(
data
)直接传递到JSONObjectWithData
。 Also, to check the error, you can print jsonError
. 另外,要检查错误,可以打印
jsonError
。
Try this. 尝试这个。
NSString* str = your string data;
NSData* data = [str dataUsingEncoding:NSUTF8StringEncoding];
NSString *decodeString = [[NSString alloc] initWithData:data
encoding:NSASCIIStringEncoding];
NSDictionary *dict = [self dictionaryWithJsonString:decodeString];
/////////////////////
- (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString {
if (jsonString == nil) {
return nil;
}
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *err;
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:&err];
if(err) {
return nil;
}
return dic;
}
Try the following code: 尝试以下代码:
NSError* error;
NSData *objectDataaaaa = [clientDetail dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:objectDataaaaa
options:kNilOptions
error:&error];
NSLog(@"JSON DICT: %@", json);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.