在iOS 5 中,Apple引入了一个解析JSON串的NSJSONSerialization类,效率大大的提高了,推荐通过该类来完成JSON数据与NSArray和NSDictionary之间的转换。
一、将NSArray或者NSDictionary转换为JSON串:
// 将字典或者数组转化为JSON串
+ (NSString *)objectToJson:(id)obj
{
if (obj == nil) {
return nil;
}
NSError *error = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:obj options:NSJSONWritingPrettyPrinted error:&error];
if ([jsonData length] && error == nil) {
return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
} else {
return nil;
}
}
二、JSON解析为NSArray、NSDictionary:
+ (id)jsonToObject:(NSString *)json
{
// string转data
NSData *jsonData = [json dataUsingEncoding:NSUTF8StringEncoding];
// json解析
id obj = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];
return obj;
}
三、实战调用示例代码:
可以新建一个NSString的分类,直接用NSString调用,虽然第二个不是返回NSString类型,但是都没多大关系,此分类为NSArray、NSDictionary与JSON的相互转换,大家都懂~~~
NSString+JSONCategories.h
#import
NS_ASSUME_NONNULL_BEGIN
@interface NSString (JSONCategories)
// 将NSArray、NSDictionary转化为JSON串
+ (NSString *)objectToJson:(id)obj;
// JSON串解析为NSArray、NSDictionary
+ (id)jsonToObject:(NSString *)json;
@end
NS_ASSUME_NONNULL_END
NSString+JSONCategories.m
#import "NSString+JSONCategories.h"
@implementation NSString (JSONCategories)
// 将NSArray、NSDictionary转化为JSON串
+ (NSString *)objectToJson:(id)obj
{
if (obj == nil) {
return nil;
}
NSError *error = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:obj options:NSJSONWritingPrettyPrinted error:&error];
if ([jsonData length] && error == nil) {
return [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
} else {
return nil;
}
}
// JSON串解析为NSArray、NSDictionary
+ (id)jsonToObject:(NSString *)json
{
// string转data
NSData *jsonData = [json dataUsingEncoding:NSUTF8StringEncoding];
// JSON解析
id obj = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:nil];
return obj;
}
@end
使用:
#import "DemoViewController.h"
#import "NSString+JSONCategories.h"
@interface DemoViewController ()
@end
@implementation DemoViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = UIColor.whiteColor;
NSArray *testArray = @[@"乔丹",@"詹姆斯",@"科比"];
NSDictionary *testDictionary = @{@"姓名":@"乔丹",
@"年龄":@"99",
@"联盟":@"NBA"};
// 将NSArray转化为JSON串
NSString *arrayToJsonString = [NSString objectToJson:testArray];
NSLog(@"arrayToJsonString = %@",arrayToJsonString);
// JSON串解析为NSArray、NSDictionary
NSString *jsonToArrayString = [NSString jsonToObject:arrayToJsonString];
NSLog(@"jsonToArrayString = %@",jsonToArrayString);
// 将NSDictionary转化为JSON串
NSString *dictionaryToJsonString = [NSString objectToJson:testDictionary];
NSLog(@"dictionaryToJsonString = %@",dictionaryToJsonString);
// JSON串解析为NSArray、NSDictionary
NSString *jsonToDictionaryString = [NSString jsonToObject:dictionaryToJsonString];
NSLog(@"jsonToDictionaryString = %@",jsonToDictionaryString);
}
@end
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)