在JSON写入iOS中获取无效的顶级类型
我试图使用AFNetworking解析json响应,但它返回错误 JSON写入中的顶级类型无效 但我的json如下所示,关于json格式没有问题,我在线检查json,一切正常在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
{
"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欢迎