jsonObject for IOS

本文介绍了一种将JSON数据直接转化为各种类型的类方法,包括实现过程和使用示例。通过继承NSClassDescription类并实现attributeKeys方法,可以轻松地将基于NSObject的数据类转化为JSON数据或从JSON数据中重建对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果你干过安卓的,发现有一个比较牛逼的东西,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.cnblogs.com/RoysPhoneBlog/p/4617239.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值