如何将JSON序列化数据转换为Objective C中的NSDictionary?

问题描述:

我已经使用以下方法将数据转换为字典在我的应用程序,但它显示json对象为零。如何将JSON序列化数据转换为Objective C中的NSDictionary?

它正在打印“jsonObject为null”。 是否有任何问题,“错误:无”。

- (void)postNonceToServer:(NSString *)paymentMethodNonce { 
// Update URL with your server 


AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"]; 



NSDictionary *parameters = @{@"payment_method_nonce":paymentMethodNonce,@"amount":amountStr,@"tripid":tripIdStr,@"currencycode":currencyStr}; 

[manager POST:@"http:url.php" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    //NSArray *response = responseObject; 
    //response = responseObject; 

    NSLog(@"responseObject is %@",responseObject); 

    jsonObject=[NSJSONSerialization 
       JSONObjectWithData:responseObject 
       options:NSJSONReadingMutableLeaves 
       error:nil]; 
    NSLog(@"jsonObject is %@",jsonObject); 


    } 
     failure:^(AFHTTPRequestOperation *operation, NSError *error) { 

      NSLog(@"Error: %@", error); 
     }]; 

} 
+1

不,不存在'error:nil',这是允许的,但它可以清楚地帮助调试您的问题,避免使用错误参数不被推荐。这就像在车内隐藏警告。只要它有效,那没关系。但是,当它不...并且,如果你显示'responseObject'(之前转换成NSString),我们可以提供帮助。 – Larme

+0

如果responseObject是'NSASCIIStringEncoding',就会发生这种情况。 'JSONObjectWithData'需要'NSUTF8StringEncoding'。这就是我在WatchOS2.2上发生的事情 – Brandon

+0

你能说详细信息@ Larme –

在这里,我正在使用AFNetworking 3.0。所以我会在AFNetworking 3.0版本中给你“POST”方法代码。

第1步: - 创建一个NSObject类并在.h文件中记下这个方法。

+ (void)requestPostUrl: (NSString *)serviceName parameters:(NSDictionary *)dictParams success:(void (^)(NSDictionary *responce))success failure:(void (^)(NSError *error))failure; 

第2步: - 写下.m文件 这里这段代码 “kBaseURL” 是指Web服务URL和服务的 “服务名” 的名称。

+ (void)requestPostUrl: (NSString *)serviceName parameters:(NSDictionary *)dictParams success:(void (^)(NSDictionary *responce))success failure:(void (^)(NSError *error))failure { 

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[manager.requestSerializer setQueryStringSerializationWithBlock:^NSString * _Nonnull(NSURLRequest * _Nonnull request, id _Nonnull parameters, NSError * _Nullable __autoreleasing * _Nullable error) { 

    //Here your data converting in JSON. 
    NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameters options:NSJSONWritingPrettyPrinted error:error]; 
    NSString *argString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 
    return argString; 
}]; 

NSString *strService = [NSString stringWithFormat:@"%@%@",kBaseURL,serviceName]; 
[manager setResponseSerializer:[AFHTTPResponseSerializer serializer]]; 
//[SVProgressHUD showWithStatus:@"Please wait..."]; 
[SVProgressHUD show]; 
[manager POST:strService parameters:dictParams progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 


    if([responseObject isKindOfClass:[NSDictionary class]]) { 

     if(success) { 
      [SVProgressHUD dismiss]; 
      success(responseObject); 
     } 
    } 
    else 
    { 
     NSDictionary *response = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil]; 
     if(success) { 
      [SVProgressHUD dismiss]; 
      NSLog(@"POST Response : %@",response); 
      success(response); 
     } 
    } 
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 

    if(failure) { 
     [SVProgressHUD dismiss]; 
     failure(error); 
    } 
}]; 
} 
+0

不工作兄弟,感谢respoonse @ Anand Nanavaty –

+0

好吧,好吧......给我发你的错误或错误快照,我会弄清楚。 @Saravanakumar –