Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios NSMutableData从Objective-C中的JSON响应中获取键值_Ios_Objective C - Fatal编程技术网

Ios NSMutableData从Objective-C中的JSON响应中获取键值

Ios NSMutableData从Objective-C中的JSON响应中获取键值,ios,objective-c,Ios,Objective C,我向API发出请求,并将结果返回到_responseData,如下所示: - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { _responseData = [[NSMutableData alloc] init]; } - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessio

我向API发出请求,并将结果返回到_responseData,如下所示:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    _responseData = [[NSMutableData alloc] init];
}
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {
    self.data = [NSMutableData data];
    completionHandler(NSURLSessionResponseAllow);
}

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
    [self.data appendData:data];
}

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
    NSArray *jsonArr = [NSJSONSerialization JSONObjectWithData:self.data options:0 error:nil];
    NSLog(@"%@", jsonArr);
}
响应是我所期望的,一个JSON片段收据-但是如何将此NSMutableData解析为JSON以便提取应用程序版本-响应看起来像删除了一些内容:

{
"receipt":{"receipt_type":"ProductionSandbox", "adam_id":0, "app_item_id":0, "application_version":"1.0", 
"in_app":[
{"quantity":"1"}
任何帮助都将不胜感激


谢谢。

最简单的方法是使用带有完成处理程序的版本:

NSURL *url = [NSURL URLWithString:@"https://jsonplaceholder.typicode.com/users"];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"POST";
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
request.HTTPBody = [@"foo=bar" dataUsingEncoding:NSUTF8StringEncoding];

NSURLSession *session = [NSURLSession sharedSession];

NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
    NSArray *jsonArr = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
    NSLog(@"%@", jsonArr);
}];

[task resume];
在您的案例中,它必须是NSDictionary*jsonDict,而不是NSArray*jsonArr。然后,您可以简单地检索特定键的值

使用委托版本时,它必须如下所示:

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    _responseData = [[NSMutableData alloc] init];
}
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler {
    self.data = [NSMutableData data];
    completionHandler(NSURLSessionResponseAllow);
}

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data {
    [self.data appendData:data];
}

- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error {
    NSArray *jsonArr = [NSJSONSerialization JSONObjectWithData:self.data options:0 error:nil];
    NSLog(@"%@", jsonArr);
}

这看起来不错,但在我的请求中,我发出了一个发送一些数据的post请求,这是如何在上面实现的?谢谢-正是我所需要的!