一. 問題描述:在使用AFN的GET請求, 在傳遞參數的時候,由於參數是字典類型的,並且AFN的GET方法的params參數是一個字典,如果參數嵌套着字典時, 當你
傳參時會發現返回的是空的JSON數據, 並且報參數為空的錯誤(Xcode並不報錯, 返回的數據中報錯), 很明顯是語法問題。
二. 解決思路:由於是語法錯誤,所以問了后台,發現后台需要的不是json數據,而是字符串格式的數據,如果直接把json字典作為參數傳遞,就是直接把json發給了后台,后台是不接受的。
三. 解決方法:所以應該把json格式的參數先轉換成字符串再放到parameters中,轉換的方法是先把json轉換成data,然后再利用string的initWithData方法生成一個字符串參數。正確步驟如下:
- (void)loadData { NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; NSMutableDictionary *requestDict = [NSMutableDictionary dictionary]; NSMutableDictionary *paramsDict = [NSMutableDictionary dictionary]; NSMutableDictionary *totalDict = [NSMutableDictionary dictionary]; requestDict[@"version"] = @"v3"; requestDict[@"method"] = @"articles"; paramsDict[@"id"] = @"1111111111112"; paramsDict[@"since"] = @""; paramsDict[@"until"] = @""; totalDict[@"request"] = requestDict; totalDict[@"params"] = paramsDict; NSString *parameter = [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:totalDict options:0 error:nil] encoding:NSUTF8StringEncoding]; parameters[@"query"] = parameter; NSLog(@"%@", parameters); [self.mgr GET:baseUrl parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSLog(@"%@", responseObject); // [responseObject writeToFile:@"/Users/Mr.C/Desktop/essence.json" atomically:YES]; } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"%@", error); }]; }