zoukankan      html  css  js  c++  java
  • ios中解析json对象基类

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

    1. @interface BaseObjectFromJson : NSObject  
    2.   
    3. + (id) objectWithDict:(NSDictionary*)dict withClassName:(NSString*)className;  
    4. + (NSArray*) objectsWithArray:(NSArray*)array withClassName:(NSString*)className;  
    5.   
    6. - (id) initWithDict:(NSDictionary*)dict;  
    7. - (NSString*) propertyClassName:(NSString*)propertyName;  
    8.   
    9. @end  
     
    1. //  
    2. //  BaseObjectFromJson.m  
    3. //  xxoo  
    4. //  
    5. //  Created by Tommy on 13-11-5.  
    6. //  Copyright (c) 2013年 Tommy. All rights reserved.  
    7. //  
    8.   
    9. #import "BaseObjectFromJson.h"  
    10. #import "objcUtils.h"  
    11.   
    12. @implementation BaseObjectFromJson  
    13.   
    14.   
    15.   
    16. + (id) objectWithDict:(NSDictionary*)dict withClassName:(NSString*)className{  
    17.     Class objClass = NSClassFromString(className);  
    18.     BaseObjectFromJson* object = nil;  
    19.     if(objClass){  
    20.         object = [[objClass alloc] initWithDict:dict];  
    21.     }else{  
    22.         NSAssert(0@"Unknown class:%@",className);  
    23.     }  
    24.       
    25.     return object;  
    26. }  
    27.   
    28. + (NSArray*) objectsWithArray:(NSArray*)array withClassName:(NSString*)className{  
    29.       
    30.     Class objClass = NSClassFromString(className);  
    31.     BaseObjectFromJson* object = nil;  
    32.     NSMutableArray* objArray = nil;  
    33.       
    34.     if(objClass){  
    35.         objArray = [NSMutableArray new];  
    36.         for (NSDictionary* dict in array){  
    37.             object = [[objClass alloc] initWithDict:dict];  
    38.             [objArray addObject:object];  
    39.         }  
    40.     }else{  
    41.         NSAssert(0@"Unknown class:%@",className);  
    42.     }  
    43.       
    44.       
    45.     return objArray;  
    46. }  
    47.   
    48. - (NSString*) description{  
    49.   
    50.     NSMutableString* desc = [NSMutableString new];  
    51.     NSArray* propertyArray = getPropertyNameList(self);  
    52.     [desc appendString:@"{ "];  
    53.       
    54.       
    55.     for (NSString* key in propertyArray) {  
    56.         [desc appendFormat:@"  %@ : %@ ",key,[self valueForKey:key]];  
    57.     }  
    58.       
    59.       
    60.     [desc appendString:@" }"];  
    61.       
    62.     return desc ;  
    63. }  
    64.   
    65.   
    66. - (id) initWithDict:(NSDictionary*)dict{  
    67.     NSArray* propertyArray = getPropertyNameList(self);  
    68.     for (NSString* key in propertyArray) {  
    69.         @try{  
    70.             if([dict[key] isKindOfClass:[NSArray class]]){  
    71.                 NSString* className = [self propertyClassName:key];  
    72.                 NSArray* array = [BaseObjectFromJson objectsWithArray:dict[key] withClassName:className?className:key];  
    73.                 [self setValue:array forKey:key];  
    74.             }else if([dict[key] isKindOfClass:[NSDictionary class]]){  
    75.                 [self setValue:[BaseObjectFromJson objectWithDict:dict[key] withClassName:key]forKey:key];  
    76.             }else{  
    77.                 [self setValue:dict[key] forKey:key];  
    78.             }  
    79.         }@catch (NSException *exception) {  
    80.             NSLog(@"except:%@:%@",key,dict[key]);  
    81.         }  
    82.     }  
    83.   
    84.     return self;  
    85. }  
    86. - (NSString*) propertyClassName:(NSString*)propertyName{  
    87.     return nil;  
    88. }  
    89.   
    90. @end  
     
    1. 这个demo很简单,用的还是上一篇中的例子。     
    1. NSString* jsonString = request.responseString;  
    2. NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];  
    3. NSDictionary *jsonObj = [jsonData objectFromJSONData];  
    4.   
    5. Result* result = [SearchResult objectWithDict:jsonObj withClassName:@"Result"];  



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

    1. - (NSString*) propertyClassName:(NSString*)propertyName这个方法就行。这样就可以找到正确的类进行解析了。  
     
  • 相关阅读:
    40 图 |我用 Mac M1 玩转 Spring Cloud
    # 20 图 |6000 字 |实战缓存(上篇)
    博客园,你肿么了?
    ES 终于可以搜到”悟空哥“了!
    48 张图 | 手摸手教你微服务的性能监控、压测和调优
    植树节,种个二叉树吧?
    紫霞仙子:区块链的十二连问
    太上老君的炼丹炉之分布式 Quorum NWR
    病毒入侵:全靠分布式
    为什么要“除夕”,原来是内存爆了
  • 原文地址:https://www.cnblogs.com/ios8/p/ios-json.html
Copyright © 2011-2022 走看看