一、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。