iOS開發中經常需要使用到服務器返回的數據,大多數情況下服務器都會返回JSON格式的數據。那么如何解析JSON數據,獲取我們需要的數據呢?
首先,我們需要使用iOS自帶的NSJSONSerialization類對JSON數據進行解析。
NSError *error = nil; NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error]; if (jsonObject != nil && error == nil){ if ([jsonObject isKindOfClass:[NSDictionary class]]){ NSDictionary *resultDict = (NSDictionary *)jsonObject; // 在字典中獲取我們需要的數據 } } else { // 解析出錯 }
上面的代碼中,我們首先將JSON字符串轉化為NSData類型的數據,然后使用NSJSONSerialization的類方法JSONObjectWithData將數據解析為Foundation框架中的對象。在判斷解析是否成功后,判斷解析出來的對象是不是NSDictionary類型,如果是,就可以在字典中通過鍵值對獲取我們需要的數據了。
除了通過字典獲取數據外,還可以通過解析后的對象轉為自定義的數據模型。比如我們有一個名為Person的類:
@interface Person : NSObject @property (nonatomic, copy) NSString *name; @property (nonatomic) NSInteger age; @property (nonatomic) NSInteger sex; @end
我們可以在字典獲取到數據后,將對象轉化為Person:
Person *person = nil if ([jsonObject isKindOfClass:[NSDictionary class]]){ NSDictionary *resultDict = (NSDictionary *)jsonObject; person = [[Person alloc] init]; person.name = resultDict[@"name"]; person.age = [resultDict[@"age"] integerValue]; person.sex = [resultDict[@"sex"] integerValue]; }
上面的代碼中,我們將字典中的name、age、sex三個鍵值對獲取到,然后通過初始化Person的方式將數據轉化為Person對象。
總的來說,解析JSON數據獲取數據的流程就是將JSON字符串轉為NSData,然后使用NSJSONSerialization的類方法JSONObjectWithData對數據進行解析,最后通過字典或自定義模型獲取我們需要的數據。
上一篇html源代碼轉換成網頁
下一篇image和java