如果你干过安卓的,发现有一个比较牛逼的东西,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];
版权声明:本文为博主原创文章,未经博主允许不得转载。