使用AFNetworking解析JSON响应

Jam*_*mes 12 json objective-c ios afnetworking xcode5

AFNetworking在Objective-C中设置了一个JSON帖子,并使用以下代码将数据发送到服务器:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @{@"name": deviceName, @"model": modelName, @"pin": pin};
manager.requestSerializer = [AFJSONRequestSerializer serializer];
[manager.requestSerializer setValue:@"Content-Type" forHTTPHeaderField:@"application/json"];
[manager POST:@"SENSORED_OUT_URL" parameters:parameters

success:^(AFHTTPRequestOperation *operation, id responseObject)
{
    NSLog(@"JSON: %@", responseObject);
}

failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
    NSLog(@"Error: %@", error);
}];
Run Code Online (Sandbox Code Playgroud)

我通过相同的请求收到信息,并希望将数据发送到 NSString.我该AFNetworking怎么做呢?

Aar*_*ger 28

responseObject是NSArray或NSDictionary.你可以在运行时检查isKindOfClass::

if ([responseObject isKindOfClass:[NSArray class]]) {
    NSArray *responseArray = responseObject;
    /* do something with responseArray */
} else if ([responseObject isKindOfClass:[NSDictionary class]]) {
    NSDictionary *responseDict = responseObject;
    /* do something with responseDict */
}
Run Code Online (Sandbox Code Playgroud)

如果你真的需要JSON的字符串,可以通过查看获得operation.responseString.

  • 如何访问操作对象?在 AFNetworking 3.0 中。 (2认同)

Raf*_*fAl 8

在这种情况下,当Web服务响应时JSON,AFNetworking将为您执行序列化,并且responseObject很可能是一个NSArrayNSDictionary对象.

与包含JSON内容的字符串相比,这样的对象应该对您更有用.


lev*_*4ka 5

在我的情况下,它看起来像(也许它可以帮助)

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

manager.requestSerializer = [AFJSONRequestSerializer serializer];
[manager POST:url parameters:params
      success:^(AFHTTPRequestOperation *operation, id responseObject) {
          NSDictionary *jsonDict = (NSDictionary *) responseObject;
          //!!! here is answer (parsed from mapped JSON: {"result":"STRING"}) ->
          NSString *res = [NSString stringWithFormat:@"%@", [jsonDict objectForKey:@"result"]];
      } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
          //....
      }
 ];
Run Code Online (Sandbox Code Playgroud)

也很好检查响应对象的类型(如/sf/answers/1537371181/答案)