ios中解析json对象基类_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > ios中解析json对象基类

ios中解析json对象基类

 2013/11/6 12:38:54  苹果吧  博客园  我要评论(0)
  • 摘要:这个是对上面一篇写的一个解析json对象的基类@interfaceBaseObjectFromJson:NSObject+(id)objectWithDict:(NSDictionary*)dictwithClassName:(NSString*)className;+(NSArray*)objectsWithArray:(NSArray*)arraywithClassName:(NSString*)className;-(id)initWithDict:(NSDictionary*)dict
  • 标签:iOS JSON 解析 JS

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

    class="dp-objc" start="1">
  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:@"{\r"];  
  53.       
  54.       
  55.     for (NSString* key in propertyArray) {  
  56.         [desc appendFormat:@"  %@ : %@\r",key,[self valueForKey:key]];  
  57.     }  
  58.       
  59.       
  60.     [desc appendString:@"\r}"];  
  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这个方法就行。这样就可以找到正确的类进行解析了。  
 
发表评论
用户名: 匿名