一、NSString的JSON解析方法
在iOS中,NSString提供了一種內置的JSON解析方法,可以將含有JSON格式字元串的NSString對象轉換為NSDictionary或NSArray對象,從而方便地將JSON數據轉換為字典或列表對象。該方法的函數聲明如下所示:
- (id)JSONObject;
其中,該方法返回的是一個id類型的對象,可以將其強制轉換為NSDictionary或NSArray對象。其具體代碼如下:
NSString *jsonString = @"{\"name\":\"John\",\"age\":22}"; NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];
註:這裡用到了NSJSONSerialization類中的JSONObjectWithData方法。
二、手動解析方法
手動解析方法就是通過字元串的分割、匹配等方法來手動解析字元串創建字典。其基本步驟如下:
1、將字元串按照分隔符進行切割獲取鍵-值對。
2、遍歷切割出來的鍵-值對,匹配相應的類型,構建字典。
3、將構建好的字典返回。
手動解析方法的代碼實現如下:
NSString *jsonString = @"{\"name\":\"John\",\"age\":22}"; NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init]; NSArray *array = [jsonString componentsSeparatedByString:@","]; for (NSString *str in array) { NSArray *kv = [str componentsSeparatedByString:@":"]; NSString *keyString = [[kv objectAtIndex:0] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; NSString *valueString = [[kv objectAtIndex:1] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; if ([valueString hasPrefix:@"\""]) { valueString = [valueString substringFromIndex:1]; valueString = [valueString substringToIndex:valueString.length - 1]; [dictionary setObject:valueString forKey:keyString]; } else { NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init]; NSNumber *value = [numberFormatter numberFromString:valueString]; [dictionary setObject:value forKey:keyString]; } }
註:這裡使用了NSNumberFormatter類的numberFromString方法進行解析。
三、使用第三方庫的方法
除了上述兩種方法外,還可以使用第三方庫方便地將字元串轉換為字典。其中,目前比較流行的第三方庫是YYModel,其具體實現代碼如下:
#import ... NSString *jsonString = @"{\"name\":\"John\",\"age\":22}"; NSDictionary *dictionary = [jsonString yy_modelToJSONObject];
這裡需要注意,在使用YYModel進行JSON解析時,需要在project的Target中添加依賴庫libz.tbd。
四、總結
以上三種方法均可用於iOS中將字元串轉換為字典,具體選擇哪種方法需要根據具體需求進行選擇。如果只是簡單的轉換,則可以使用NSString的內置JSON解析方法;如果需要進行複雜的解析,則可以使用手動解析方法;而如果想要方便地解析JSON數據,則可以使用第三方庫YYModel。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/296120.html