jsonObject for IOS

来源:互联网 发布:java soa架构是什么 编辑:程序博客网 时间:2024/06/05 16:05

如果你干过安卓的,发现有一个比较牛逼的东西,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];


0 0
原创粉丝点击