Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.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
在JSON写入iOS中获取无效的顶级类型_Ios_Objective C_Afnetworking_Java - Fatal编程技术网

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

在JSON写入iOS中获取无效的顶级类型,ios,objective-c,afnetworking,java,Ios,Objective C,Afnetworking,Java,我试图使用AFNetworking解析json响应,但它返回错误 JSON写入中的顶级类型无效 但我的json如下所示,关于json格式没有问题,我在线检查json,一切正常 { "Result": { "RoomDetail": [ { "RoomName": "crs", "NaturalName": "aaa" }, { "RoomName": "ios", "NaturalNa

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

JSON写入中的顶级类型无效

但我的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中有一个错误:


我没有将响应头中的ContentType设置为
application/Json。

我认为您不需要将数据转换为Json格式,因为AFHTTPRequestOperationManager总是以id返回

编写此代码作为响应

NSMUTABLEARRY*dataArray=[NSMUTABLEARRY new];
dataArray=[responseObject mutableCopy]

您不需要这样做

 jsonData = [NSJSONSerialization dataWithJSONObject:responseObject options:NSJSONWritingPrettyPrinted error:&writeError];
当您使用AFNetworking时,它已经序列化了json对象中的数据

所以去掉

 {
            jsonData = [NSJSONSerialization dataWithJSONObject:responseObject options:NSJSONWritingPrettyPrinted error:&writeError];
        }

你可以直接打印,就像

 NSLog(@"%@",responseObject)
或者,您可以直接从
响应对象
中获取所需的值

更新:

将整个代码替换为

   @try {


    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];

    AFURLSessionManager *managers = [[AFURLSessionManager alloc]initWithSessionConfiguration:configuration];



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

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



    AFHTTPRequestSerializer *requestSerializer = [AFHTTPRequestSerializer serializer];


    NSMutableURLRequest *request = [requestSerializer requestWithMethod:@"POST" URLString:setUrl parameters:parameter error:nil];

    [[managers dataTaskWithRequest:request completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {

        NSLog(@"response Object : %@",responseObject);

    }]resume];
}
@catch (NSException *exception) {
}

尝试此操作以在成功块中获取数据

NSDictionary *allresult = (NSDictionary *)responseObject;
NSDictionary *Result = [allresult objectForKey:@"Result"];
NSArray *roomDetail = [Result objectForKey:@"RoomDetail"];

for(NSDictionary *rooms in roomDetail)
{
    NSString *roomname = [rooms objectForKey:@"RoomName"];
    NSString *naturalName = [rooms objectForKey:@"NaturalName"];
    NSLog(@"roomname : %@ ---> naturalname : %@", roomname, naturalName);
}

可能是您缺少可接受的内容类型

只需尝试以下代码:

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) {

     }];

隐藏此`jsonData=[NSJSONSerialization dataWithJSONObject:responseObject选项:NSJSONWriting预打印错误:&writeError];`这个
managers.responseSerializer=[AFHTTPResponseSerializer]并重试一次,通过注释responseSerializer,它会给我错误:错误:错误域=com.alamofire.error.serialization.response代码=-1016“请求失败:不可接受的内容类型:text/html”,在该行中,u面对它直接发送到“”失败:^(AFHTTPRequestOperation)的错误"@Kabali您缺少
内容类型
。请检查我的答案。希望能对您有所帮助。我的回答对象是@Kabali-您需要使用json将数据转换为dict或数组serlization@Kabali:您尝试过我更新的答案吗?我再次更新了!!用户名是我的密钥,bhavin是值,所以在这里可以…使用'initWithOb'jectsAndKeys的my responseObject是在成功块中尝试这一行,并告诉我输出结果是什么(用断点查看)。
NSDictionary*allresult=(NSDictionary*)responseObject;
其结果相同:我的web服务中缺少acceptableContentTypes..thx以获取帮助。@EktaPadaliya谢谢。很好Answer@JagatDave欢迎