打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ios中解析json对象基类

这个是对上面一篇写的一个解析json对象的基类

@interface BaseObjectFromJson : NSObject+ (id) objectWithDict:(NSDictionary*)dict withClassName:(NSString*)className;+ (NSArray*) objectsWithArray:(NSArray*)array withClassName:(NSString*)className;- (id) initWithDict:(NSDictionary*)dict;- (NSString*) propertyClassName:(NSString*)propertyName;@end

////  BaseObjectFromJson.m//  xxoo////  Created by Tommy on 13-11-5.//  Copyright (c) 2013年 Tommy. All rights reserved.//#import "BaseObjectFromJson.h"#import "objcUtils.h"@implementation BaseObjectFromJson+ (id) objectWithDict:(NSDictionary*)dict withClassName:(NSString*)className{    Class objClass = NSClassFromString(className);    BaseObjectFromJson* object = nil;    if(objClass){        object = [[objClass alloc] initWithDict:dict];    }else{        NSAssert(0, @"Unknown class:%@",className);    }        return object;}+ (NSArray*) objectsWithArray:(NSArray*)array withClassName:(NSString*)className{        Class objClass = NSClassFromString(className);    BaseObjectFromJson* object = nil;    NSMutableArray* objArray = nil;        if(objClass){        objArray = [NSMutableArray new];        for (NSDictionary* dict in array){            object = [[objClass alloc] initWithDict:dict];            [objArray addObject:object];        }    }else{        NSAssert(0, @"Unknown class:%@",className);    }            return objArray;}- (NSString*) description{    NSMutableString* desc = [NSMutableString new];    NSArray* propertyArray = getPropertyNameList(self);    [desc appendString:@"{\r"];            for (NSString* key in propertyArray) {        [desc appendFormat:@"  %@ : %@\r",key,[self valueForKey:key]];    }            [desc appendString:@"\r}"];        return desc ;}- (id) initWithDict:(NSDictionary*)dict{    NSArray* propertyArray = getPropertyNameList(self);    for (NSString* key in propertyArray) {        @try{            if([dict[key] isKindOfClass:[NSArray class]]){                NSString* className = [self propertyClassName:key];                NSArray* array = [BaseObjectFromJson objectsWithArray:dict[key] withClassName:className?className:key];                [self setValue:array forKey:key];            }else if([dict[key] isKindOfClass:[NSDictionary class]]){                [self setValue:[BaseObjectFromJson objectWithDict:dict[key] withClassName:key]forKey:key];            }else{                [self setValue:dict[key] forKey:key];            }        }@catch (NSException *exception) {            NSLog(@"except:%@:%@",key,dict[key]);        }    }    return self;}- (NSString*) propertyClassName:(NSString*)propertyName{    return nil;}@end



这个demo很简单,用的还是上一篇中的例子。   
    NSString* jsonString = request.responseString;    NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];    NSDictionary *jsonObj = [jsonData objectFromJSONData];    Result* result = [SearchResult objectWithDict:jsonObj withClassName:@"Result"];        


如果一个需要对一个json对象的解析中不存在数组之类的,就直接继承就行,什么都不用写。如果有数组的话,就需要重载

- (NSString*) propertyClassName:(NSString*)propertyName这个方法就行。这样就可以找到正确的类进行解析了。


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【备考】2015年成人高考英语写作常用100个关键词
python 排列组合
result
delphi 检查输入的IP地址串是否合法
C#中保留小数点后N位的方法
物流查询
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服