如果你干过安卓的,发现有一个比较牛逼的东西,jsonObject可以直接转化为所有的类型。我模仿的做了一个,还不算完美,有些缺陷,贡献给大家,希望大家指点指点。@H_502_1@
@H_502_1@
// // NSObject+json.h // JSONTest // // Created by Roy on 14-7-4. // #import <Foundation/Foundation.h> @interface NSObject (json) -(id)jsonObject:(NSData *)data error:(NSError **)error; -(NSData *)createJsonDataWithOption:(NSInteger)option error:(NSError **)error; @end
NSObject+json.m@H_502_1@
@H_502_1@
// // NSObject+json.m // JSONTest // // Created by Roy on 14-7-4. // #import "NSObject+json.h" @implementation NSObject (json) -(id)jsonObject:(NSData *)data error:(NSError **)error{ id jsonObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:error]; if (error ==nil&&[jsonObject count]!=0){ @try { NSArray *array = [jsonObject allKeys]; for (NSString *strName in array) { NSString *str = [NSString stringWithFormat:@"%@",strName]; [self setValue:[jsonObject objectForKey:strName] forKey:str]; } } @catch (NSException *exception) { NSLog(@"有错误"); return nil; } @finally { return nil; } }else if([jsonObject count]==0){ NSLog(@"获得的数据为空"); return nil; } return self; } -(NSData *)createJsonDataWithOption:(NSInteger)option error:(NSError *__autoreleasing *)error { if ([self respondsToSelector:@selector(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:option error:error]; } return nil; } @end
@H_502_1@
注意:如果你想使用这个类,你必须把你的基于NSObject的数据类实现atrributeKeys ,该类继承于NSClassDescription类,这是个抽象类。需要你实现。@H_502_1@
@H_502_1@
下面是我的例子@H_502_1@
@H_502_1@
ATClass.h@H_502_1@
@H_502_1@
@H_502_1@
// // ATClass.h // JSONTest // // Created by Roy on 14-7-4. // Copyright (c) 2014年 byids. All rights reserved. // #import <Foundation/Foundation.h> @interface ATClass : NSObject @property (strong) NSArray *array; @property (strong) NSString *name; @end
ATClass.m
@H_502_1@
@H_502_1@
// // ATClass.m // JSONTest // // Created by Roy on 14-7-4. // Copyright (c) 2014年 byids. All rights reserved. // #import "ATClass.h" @implementation ATClass @synthesize name,array; -(id)init{ self = [super init]; if (self) { self.array = [NSArray arrayWithObjects:@"123",nil]; self.name = @"1234"; } return self; } -(NSArray*)attributeKeys{ return [NSArray arrayWithObjects:@"array",@"name",nil]; } @end
然后是使用他们:@H_502_1@
@H_502_1@
ATClass *class = [[ATClass alloc]init]; NSData *data = [class createJsonDataWithOption:0 error:nil]; class.array = [NSArray arrayWithObjects:@"321",nil]; class = [class jsonObject:data error:nil];