成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

iOS網絡交互數據格式解析之json

移動開發 iOS
作為一種輕量級的數據交換格式,json正在逐步取代xml,成為網絡數據的通用格式。從ios5開始,apple提供了對json的原生支持,但為了兼容以前的ios版本,我們仍然需要使用第三方庫來解析常用的ios json庫有json-framework、JSONKit、TouchJSON等。

JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,目前在網絡交互過程中有著舉足輕重的地位如果您對json還有什么不清楚的話建議去看json百度百科

    在iOS平臺上,Apple 從 iOS 5.0 才開始提供原生的json生成和解析的API,使用起來 非常方便,但這樣就無法為iOS 5.0 之前版本的用戶服務了。對于iOS 5.0以前的系統,json的使用得益于無數無私的開源擁護者的貢獻。估計大多數開發者現在還不會直接拋棄仍在使用 5.0 以前版本的用戶,所以這里優先介紹3種主要的開源庫的使用,然后再介紹新的原生API的使用。

    測試數據我們使用國家氣象局提供的天氣預報接口:

     您可以用瀏覽器打開,看看這三個地址到底是什么--其實你可以分別看到3個字符串,沒錯,你才對了,這就是我們測試用的 json 數據。

    我們打開 github 搜索關鍵字 json ,程序語言選擇 Objective-C ;可以得到 n 頁結果。我們就依次介紹最前面的3個:stig/json-framework、TouchCode/TouchJSON、johnezang/JSONKit。緊接著介紹 iOS 5.0 開始提供的原生 JSON 處理類。

    此處我們將這三個開源庫及原生JSON處理類放到一個工程里介紹了,但開源庫 stig/json-framework 編譯是需要ARC支持的,而TouchCode/TouchJSON 和 johnezang/JSONKit 是不需要 ARC 支持。這樣我么在工程中就需要打開 ARC (可以在創建工程的時候就選中 ARC,也可和下圖一樣在build setting 中設置兩處 為 YES)

然后對后兩者在編譯規則中做簡單的處理,-fno-objc-arc即是規定該文件編譯時不需要ARC支持,如下圖:

因為我們測試的數據來自于互聯網,所以我們需要網絡支持,這里我們需要添加系統庫:CFNetwork.framework,如下圖

終于開始寫代碼了,公用代碼:

1.將url地址定義成字符串常量

2.import 相應文件;

3.連接到測試的url;

4.取得json數據,并將其以字符串的形式顯示在第一個 TextView 上;

5.將解析后的JSON實際內容顯示在第二個 TextView 上

  1. //為了方便,先在工程中的 .pch 文件中定義 字符串常量 
  2. #define jsonSourceURLAddress_1 @"http://m.weather.com.cn/data/101010100.html" 
  3. #define jsonSourceURLAddress_2 @"http://www.weather.com.cn/data/sk/101010100.html" 
  4. #define jsonSourceURLAddress_3 @"http://www.weather.com.cn/data/cityinfo/101010100.html
  1. #import "LTRootViewController.h" 
  2. //測試工程中 3 中方式都是在這個controller中使用,將需要的import進來 
  3. #import "SBJson.h" 
  4. #import "TouchJSON/JSON/CJSONDeserializer.h" 
  5. #import "JSONKit/JSONKit.h"
  1. - (void)viewDidLoad 
  2.     [super viewDidLoad]; 
  3.     //向開源的地址發送連接請求 
  4.     //這里使用的是異步的請求 
  5.     NSURL *url = [NSURL URLWithString:jsonSourceURLAddress_1]; 
  6.     NSURLRequest    *urlRequest = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:30]; 
  7.     NSURLConnection *urlConnection = [NSURLConnection connectionWithRequest:urlRequest delegate:self]; 
  8.     [urlConnection start]; 
  1. #pragma mark - NSURLConnectionDataDelegate methods 
  2. - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
  3.     UIAlertView * alertV = [[UIAlertView alloc] initWithTitle:@"網絡連接失敗" message:[NSString  stringWithFormat:@"%@",error] delegate:self cancelButtonTitle:nil otherButtonTitles:nil, nil]; 
  4.     [alertV show]; 
  5. - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
  6.     //這里我們終于拿到了網絡返回的 JSON 數據 data 
  7.     self.m_JsonData = data; 
  8.     self.m_sourceJsonTV.text = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 
  1. - (void)displayWithParsedDic:(NSDictionary *)rootDic 
  2.     //rootDic 來自與我們所用的各種方式將 JSON 解析后得到的字典 
  3.     //下面用于在 TextView 中顯示解析成功的JSON實際內容 
  4.     if (!rootDic) { 
  5.         self.m_parsedJsonTV.text = @"cleaned..."
  6.     }else
  7.        NSDictionary *weatherInfo = [rootDic objectForKey:@"weatherinfo"]; 
  8.         //由于字典中內容太多,我們只顯示了一部分,諸如 temp2,temp3,...我們木有在這一一顯示 
  9.         self.m_parsedJsonTV.text = [NSString stringWithFormat:@"今天是 %@  %@  %@  的天氣狀況是:%@  %@ ",[weatherInfo objectForKey:@"date_y"],[weatherInfo objectForKey:@"week"],[weatherInfo objectForKey:@"city"], [weatherInfo objectForKey:@"weather1"], [weatherInfo objectForKey:@"temp1"]]; 
  10.     } 

現在分類的介紹這4種JSON解析方式:

1、json-framework

    也有人管這庫叫SBJson我們從 github 上下載 json-framework這個庫并將其導入到我們的工程中(僅需將下載下來的文件夾中,classes 目錄下的所有文件復制導入到我們的工程就行)。在任何你需要使用json處 :#import "SBJson.h" 

  1. - (IBAction)sbjsonAction:(id)sender { 
  2.     //此處是使用 json-framework (SBJSON)解析,得到解析后存入字典:rootDic,并顯示 
  3.     SBJsonParser * parser = [[SBJsonParser alloc] init]; 
  4.     NSString * jsonStr = [[NSString alloc] initWithData:self.m_JsonData encoding:NSUTF8StringEncoding]; 
  5.     NSDictionary *rootDic = [parser objectWithString:jsonStr]; 
  6.     [self displayWithParsedDic:rootDic]; 

2、TouchJSON

    我糾結了很久,要不要介紹這個庫了,因為作者在github上聲稱:"But you should NOT be using this code in your new projects"。

    我們從 github 上下載 TouchCode/TouchJSON 這個庫并將其導入到我們的工程中(僅需將下載下來的文件夾中,Source 目錄下的所有文件復制導入到我們的工程)。但是 Source/Experimental目錄下提供的功能慎用( Be aware that the code in the Experimental subdirectory of Source is just that and may not have been extensively tested and/or have extra dependencies)。在任何你需要使用json處:#import "CJSONDeserializer.h"

  1. - (IBAction)touchJsonAction:(id)sender { 
  2.     //此處是使用 TouchJSON 解析,得到解析后存入字典:rootDic,并顯示 
  3.     NSError * error = nil;//error 用來存儲解析過程中可能出現的錯誤信息 
  4.     NSDictionary *rootDic = [[CJSONDeserializer deserializer] deserialize:self.m_JsonData error:&error]; 
  5.     [self displayWithParsedDic:rootDic]; 

3、JSONKit

    我們從 github 上下載 johnezang/JSONKit 這個庫并將其導入到我們的工程中(這個很簡單,代碼文件只有2個,都復制導入我們的工程吧)。

  1. - (IBAction)jsonkitAction:(id)sender { 
  2.     //此處是使用 JSONKit 解析,得到解析后存入字典:rootDic,并顯示 
  3.     NSDictionary * rootDic = [self.m_JsonData objectFromJSONDataWithParseOptions:JKParseOptionLooseUnicode]; 
  4.     [self displayWithParsedDic:rootDic]; 

4、原生JSON處理類

    使用原生的JSON處理類解析就相當方便了,據說也是最快的(未親測速度):

  1. - (IBAction)nsjsonAction:(id)sender { 
  2.     //此處是使用原生的 JSON 處理類解析,得到解析后存入字典:rootDic,并顯示 
  3.     NSError *error = nil; 
  4.     NSDictionary * rootDic = [NSJSONSerialization JSONObjectWithData:self.m_JsonData options:NSJSONReadingMutableLeaves error:&error]; 
  5.     [self displayWithParsedDic:rootDic]; 

小結:這里只是介紹了最簡單的通過網絡得到JSON并解析之的方法。在實際應用中我們可能還要主意在解析時,根據實際傳輸的數據需要設置的 option 類型。由于本人的水平有限,如果有錯我還請各位拍磚,并點出來我一定第一時間更正。

責任編輯:閆佳明 來源: oschina
相關推薦

2010-01-06 14:04:55

Json數據格式

2011-04-11 09:48:59

AjaxWEB服務

2014-08-12 10:15:42

數據格式JSONXML

2009-09-07 19:02:07

JSON是什么

2024-04-15 13:13:04

PythonJSON

2010-01-06 13:23:20

JSON數據格式

2024-11-12 12:08:06

JSON數據技巧

2021-11-11 23:16:33

前端數據格式Web

2011-04-11 13:14:58

AjaxWEB服務

2011-03-07 15:01:42

MySQLXML數據

2009-03-09 09:34:56

AjaxHTMLJavaScript

2011-04-07 10:15:00

AjaxWeb

2011-08-22 16:08:46

IOS開發數據庫

2024-12-19 00:12:02

APIJSON數據

2011-07-19 09:08:38

jQuery

2020-12-02 10:13:45

JacksonJDK解析器

2010-07-09 10:42:38

HART協議

2010-06-28 09:09:24

SQL Server

2010-07-09 10:27:33

SQL Server數

2022-06-05 14:57:35

發送釘釘運維架構
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久99精品视频 | 久草综合在线视频 | 国产精品18毛片一区二区 | av在线一区二区三区 | 日韩av三区 | 亚洲欧美中文字幕 | 精国产品一区二区三区四季综 | 一级免费毛片 | 99热这里都是精品 | 亚洲一区二区在线播放 | 久久久久久久久久久久久久av | 国产特级毛片aaaaaa喷潮 | 久久久综合色 | 国产一在线观看 | 蜜月aⅴ免费一区二区三区 99re在线视频 | 天堂网色 | 免费成人高清在线视频 | 粉嫩av在线| 91久久精品国产 | 亚洲福利视频一区二区 | 欧美成人a∨高清免费观看 老司机午夜性大片 | 日本午夜免费福利视频 | 国产一区三区在线 | 精品视频亚洲 | 在线精品一区二区 | 做a视频 | 亚洲精品一区二区 | 亚洲综合在线视频 | 三区四区在线观看 | 亚洲一区二区三区久久久 | 伊人在线视频 | av在线一区二区三区 | 可以免费观看的av片 | 亚洲一区二区三区免费观看 | 欧美日韩在线免费观看 | 精品av| av网站在线播放 | 亚洲欧美日韩国产 | 成人亚洲精品久久久久软件 | 亚洲伊人久久综合 | 亚洲一区 |