使用AFN 發出請求並傳遞json字符串參數遇到的一點問題


一. 問題描述:在使用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);
    }];
    
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM