您的位置:首页 > 移动开发 > Objective-C

iOS上的jsonObject

2014-07-10 15:08 561 查看
看着java上的jsonObject比较眼馋,于是自己做了一个,代码如下,完善了错误信息:

NSObject+json.h

#import <Foundation/Foundation.h>

@interface NSObject (json)

-(id)jsonObject:(NSData *)data error:(NSError **)error;

-(NSData *)createJsonData:(NSError **)error;

@end


NSObject+json.m

#import "NSObject+json.h"

@implementation NSObject (json)
-(id)jsonObject:(NSData *)data error:(NSError **)error{
id jsonObject = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:error];
if (error ==nil&&[jsonObject count]!=0){
@try {
NSArray *array = [jsonObject allKeys]; //因为有可能抛出异常来
NSArray *arrayKey = [self attributeKeys];
//比较两个数组的元素,如果本类里面的元素包含了接受到的json字典里面的元素即可,如果不包含就抛出错误并返回nil
NSSet *jsonSet = [NSSet setWithArray:array];
NSSet *attributeKeySet = [NSSet setWithArray:arrayKey];

if ([jsonSet isSubsetOfSet:attributeKeySet]) {
for (NSString *strKey in array) {
[self setValue:[jsonObject objectForKey:strKey] forKey:strKey];
}
}else{
*error = [self _createExceptionError:@"this NSData has an invalid argument"];
return nil;
}
}
@catch (NSException *exception) {
*error = [self _createExceptionError:[NSString stringWithFormat:@"%@",exception]];
return nil;
}
}else{
*error = [self _createExceptionError:@"this NSData is an invalid argument for jsonObject"];
return nil;
}
return self;
}

-(NSData *)createJsonData:(NSError *__autoreleasing *)error {
if ([self respondsToSelector:@selector(attributeKeys)]) { //必须重载attributeKeys函数
NSArray *array = [self attributeKeys];
NSMutableDictionary *dic = [[NSMutableDictionary alloc]init];
for (NSString *keyName in array) {
[dic setObject:[self valueForKey:keyName] forKey:keyName];
}
return [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:error];
}
return nil;
}

-(NSError *)_createExceptionError:(NSString *)errorMsg{
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:errorMsg forKey:NSLocalizedDescriptionKey];

return [NSError errorWithDomain:@"jsonObjectException"
code:0
userInfo:userInfo];
}
@end


使用方法和案例:

ATClass.h

#import <Foundation/Foundation.h>

@interface ATClass : NSObject

@property (strong) NSArray *array;
@property (strong) NSString *name;
@property NSInteger index;
@end




ATClass.m

#import "ATClass.h"

@implementation ATClass
@synthesize name,array,index;

-(id)init{
self = [super init];
if (self) {
self.array = [NSArray arrayWithObjects:@"123", nil];
self.name = @"1234";
self.index =23;
}
return self;
}

-(NSArray*)attributeKeys{
return [NSArray arrayWithObjects:@"array",@"name",@"index",nil];
}

@end




main.m

ATClass *class = [[ATClass alloc]init];
NSData *data = [class createJsonData:nil];

class.array = [NSArray arrayWithObjects:@"321", nil];
class.index = 32;
NSArray *object =[NSArray arrayWithObjects:@"123312", nil];

NSData *jsonData = [NSJSONSerialization dataWithJSONObject:object options:0 error:nil];

NSError *error;
// class = [class jsonObject:jsonData error:&error];
class = [class jsonObject:data error:&error];
NSLog(@"%@",error);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  json IOS jsonObject