ios - 在 JSON 中获取无效的顶级类型写入 iOS

标签 ios objective-c afnetworking java

我尝试使用 AFNetworking 解析 json 响应,但它返回错误;

Invalid top-level type in JSON writes

但是我的json如下,关于json格式没有问题,我在网上查了json没问题。

{
  "Result": {
    "RoomDetail": [
      {
        "RoomName": "crs",
        "NaturalName": "aaa"
      },
      {
        "RoomName": "ios",
        "NaturalName": "ios"
      }
    ]
  }
}

这是我使用的代码:

-(void)CallRoom
{
    @try {
        AFHTTPRequestOperationManager *managers = [AFHTTPRequestOperationManager manager];

        NSMutableDictionary *parameter = [[NSMutableDictionary alloc]initWithObjectsAndKeys:
                                           @"bhavin",@"userName",
                                           nil];

        NSString *setUrl = [NSString stringWithFormat:@"http://localhost/OpenFire-Chat/getChatRoomsByUser.htm"];

        managers.responseSerializer = [AFHTTPResponseSerializer serializer];

        [managers POST:setUrl parameters:parameter success:^(AFHTTPRequestOperation *operation, id responseObject) {

            NSError *writeError = nil;
            NSData *jsonData;

            //if ([NSJSONSerialization isValidJSONObject:responseObject])
            {
                jsonData = [NSJSONSerialization dataWithJSONObject:responseObject options:NSJSONWritingPrettyPrinted error:&writeError];
            }


            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
                                                                options:NSJSONReadingMutableContainers
                                                                  error:&writeError];
        }failure:^(AFHTTPRequestOperation *operation, NSError *error) {

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

    }
    @catch (NSException *exception) {
     }


}

编辑

好的,所以我的 Web 服务 API 中有一个错误:

我没有将 Response header 中的 ContentType 设置为 application/Json.

最佳答案

可能是您缺少 acceptableContentTypes

只需尝试下面的代码:

AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer];
[serializer setStringEncoding:NSUTF8StringEncoding];

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer=serializer;

manager.responseSerializer.acceptableContentTypes=[NSSet setWithObjects:@"text/html",@"application/json", nil];

NSMutableDictionary *parameter = [[NSMutableDictionary alloc]initWithObjectsAndKeys:
                                  @"bhavin",@"userName",
                                  nil];

NSString *setUrl = [NSString stringWithFormat:@"http://localhost/OpenFire-Chat/getChatRoomsByUser.htm"];

[manager POST:setUrl parameters:parameter progress:nil success:^(NSURLSessionTask *task, id responseObject)
     {
         //log responseObject
     } failure:^(NSURLSessionTask *operation, NSError *error) {

     }];

关于ios - 在 JSON 中获取无效的顶级类型写入 iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38734429/

相关文章:

ios - NSURLSession:无法与后台传输服务通信

ios - 使用 FaSTLane 时如何设置 `-ferror-limit`

iphone - 获取 UIButton 所在的 View

iphone - XCode 不小心将我的项目添加到文件夹

ios - 如何获取iOS设备的相机名称?

ios - 如何使用最新的 FBSDK 在 iOS 应用程序中集成 Facebook 而无需重定向 Safari 浏览器

ios - AFNetworking (iOS) - 响应不是 NSDictionary

ios - 快门声卡顿

objective-c - 如何在 OSX 中调试 XPC 服务和客户端应用程序之间的通信

ios - 我可以构建自己的网络框架(依赖于 AFNetworking)作为 watchOS2 框架吗?