AFNetworking的使用&json轉(zhuǎn)字典

一.AFNetworking的簡(jiǎn)單使用:

導(dǎo)入頭文件
    #import <AFNetworking.h>

    //1.創(chuàng)建會(huì)話管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    
    //2.封裝參數(shù)
    NSDictionary *dict = @{
                           @"appid":@"201211268888",
                           @"type":@"ios"
                           };
    //3.發(fā)送GET請(qǐng)求

    /*
     第一個(gè)參數(shù):請(qǐng)求路徑(NSString)+ 不需要加參數(shù)
     第二個(gè)參數(shù):發(fā)送給服務(wù)器的參數(shù)數(shù)據(jù)
     第三個(gè)參數(shù):progress 進(jìn)度回調(diào)
     第四個(gè)參數(shù):success  成功之后的回調(diào)(此處的成功或者是失敗指的是整個(gè)請(qǐng)求)
     task:請(qǐng)求任務(wù)
     responseObject:注意!!!響應(yīng)體信息--->(json--->oc))
     task.response: 響應(yīng)頭信息
     第五個(gè)參數(shù):failure 失敗之后的回調(diào)
     */

    [manager GET:@"http://..." parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"success--%@--%@",[responseObject class],responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"failure--%@",error);
    }];

遇到type類型無(wú)法解析時(shí):進(jìn)入AFURLResponseSerialization.m文件227行左右添加上需要解析的類型:

-    self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil];
+    self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript",@"text/html", nil];

請(qǐng)求時(shí)可能遇到的錯(cuò)誤及解決方案:

1. error : JSON text did not start with array or object and option to allow fragments not set.

這是因?yàn)?AFNetworking默認(rèn)把響應(yīng)結(jié)果當(dāng)成json來(lái)處理,(默認(rèn)manager.responseSerializer = [AFJSONResponseSerializer serializer]) ,很顯然,我們請(qǐng)求的百度首頁(yè) 返回的并不是一個(gè)json文本,而是一個(gè)html網(wǎng)頁(yè),但是AFNetworking并不知道,它堅(jiān)信請(qǐng)求的結(jié)果就是一個(gè)json文本!然后固執(zhí)地以json的形式去解析,顯然沒(méi)辦法把一個(gè)網(wǎng)頁(yè)解析成一個(gè)字典或者數(shù)組,所以產(chǎn)生了上述錯(cuò)誤.解決這種問(wèn)題只需要在發(fā)送請(qǐng)求前加上:

manager.responseSerializer = [AFHTTPResponseSerializer serializer];

但這樣的話可能會(huì)導(dǎo)致responseObject的輸出類型為_(kāi)NSInlineData,輸入結(jié)果為這樣:

(lldb) po responseObject
<7b226365 6c6c7068 6f6e6522 3a6e756c 6c2c2275 73657270 7764223a 22222c22 61646472 65737322 3a6e756c 6c2c2269 64223a30 2c227573 65726e61 6d65223a 22777037 227d>

因此在請(qǐng)求成功后要對(duì)respon進(jìn)行一個(gè)data->json的轉(zhuǎn)換:

NSDictionary * dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:nil];
        NSLog(@"ResDic = %@",dic);

二.json轉(zhuǎn)字典

- (NSDictionary *)parseJSONStringToNSDictionary:(NSString *)JSONString {
    NSData *JSONData = [JSONString dataUsingEncoding:NSUTF8StringEncoding];
    NSDictionary *responseJSON = [NSJSONSerialization JSONObjectWithData:JSONData options:NSJSONReadingMutableLeaves error:nil];
    return responseJSON;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,297評(píng)論 4 61
  • 加入了百人百天挑戰(zhàn)營(yíng)后,我發(fā)現(xiàn)又給自己找了一件麻煩事。理想很豐滿,現(xiàn)實(shí)很骨感。加入時(shí)幻想著養(yǎng)成跑步的習(xí)慣,減肥,鍛...
    平凡而溫暖的小月亮閱讀 340評(píng)論 1 1
  • 淺拷貝和深拷貝 在某些狀況下,類內(nèi)成員變量需要?jiǎng)討B(tài)開(kāi)辟堆內(nèi)存,如果實(shí)行位拷貝,也就是把對(duì)象里的值完全復(fù)制給另一個(gè)對(duì)...
    Temple_Li閱讀 970評(píng)論 0 2
  • (之一) 仙人的桃花流水 文/陳述 沒(méi)有桃花的春天,就沒(méi)有淡淡的芳香。這...
    詩(shī)人陳述閱讀 399評(píng)論 2 4

友情鏈接更多精彩內(nèi)容