如何将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);
}];
}
答
在这里,我正在使用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 –
不,不存在'error:nil',这是允许的,但它可以清楚地帮助调试您的问题,避免使用错误参数不被推荐。这就像在车内隐藏警告。只要它有效,那没关系。但是,当它不...并且,如果你显示'responseObject'(之前转换成NSString),我们可以提供帮助。 – Larme
如果responseObject是'NSASCIIStringEncoding',就会发生这种情况。 'JSONObjectWithData'需要'NSUTF8StringEncoding'。这就是我在WatchOS2.2上发生的事情 – Brandon
你能说详细信息@ Larme –