如果你干过安卓的,发现有一个比较牛逼的东西,jsonObject可以直接转化为所有的类型。我模仿的做了一个,还不算完美,有些缺陷,贡献给大家,希望大家指点指点。
文件: NSObject+json.h
// // 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
// // 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
注意:如果你想使用这个类,你必须把你的基于NSObject的数据类实现atrributeKeys ,该类继承于NSClassDescription类,这是个抽象类。需要你实现。
下面是我的例子
ATClass.h
// // 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
// // 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
然后是使用他们:
ATClass *class = [[ATClass alloc]init]; NSData *data = [class createJsonDataWithOption:0 error:nil]; class.array = [NSArray arrayWithObjects:@"321",nil]; class = [class jsonObject:data error:nil];原文链接:https://www.f2er.com/json/290134.html