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

  1. @interface BaseObjectFromJson : NSObject
  2. + (id) objectWithDict:(NSDictionary*)dict withClassName:(NSString*)className;
  3. + (NSArray*) objectsWithArray:(NSArray*)array withClassName:(NSString*)className;
  4. - (id) initWithDict:(NSDictionary*)dict;
  5. - (NSString*) propertyClassName:(NSString*)propertyName;
  6. @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. #import "BaseObjectFromJson.h"
  9. #import "objcUtils.h"
  10. @implementation BaseObjectFromJson
  11. + (id) objectWithDict:(NSDictionary*)dict withClassName:(NSString*)className{
  12. Class objClass = NSClassFromString(className);
  13. BaseObjectFromJson* object = nil;
  14. if(objClass){
  15. object = [[objClass alloc] initWithDict:dict];
  16. }else{
  17. NSAssert(0, @"Unknown class:%@",className);
  18. }
  19. return object;
  20. }
  21. + (NSArray*) objectsWithArray:(NSArray*)array withClassName:(NSString*)className{
  22. Class objClass = NSClassFromString(className);
  23. BaseObjectFromJson* object = nil;
  24. NSMutableArray* objArray = nil;
  25. if(objClass){
  26. objArray = [NSMutableArray new];
  27. for (NSDictionary* dict in array){
  28. object = [[objClass alloc] initWithDict:dict];
  29. [objArray addObject:object];
  30. }
  31. }else{
  32. NSAssert(0, @"Unknown class:%@",className);
  33. }
  34. return objArray;
  35. }
  36. - (NSString*) description{
  37. NSMutableString* desc = [NSMutableString new];
  38. NSArray* propertyArray = getPropertyNameList(self);
  39. [desc appendString:@"{\r"];
  40. for (NSString* key in propertyArray) {
  41. [desc appendFormat:@"  %@ : %@\r",key,[self valueForKey:key]];
  42. }
  43. [desc appendString:@"\r}"];
  44. return desc ;
  45. }
  46. - (id) initWithDict:(NSDictionary*)dict{
  47. NSArray* propertyArray = getPropertyNameList(self);
  48. for (NSString* key in propertyArray) {
  49. @try{
  50. if([dict[key] isKindOfClass:[NSArray class]]){
  51. NSString* className = [self propertyClassName:key];
  52. NSArray* array = [BaseObjectFromJson objectsWithArray:dict[key] withClassName:className?className:key];
  53. [self setValue:array forKey:key];
  54. }else if([dict[key] isKindOfClass:[NSDictionary class]]){
  55. [self setValue:[BaseObjectFromJson objectWithDict:dict[key] withClassName:key]forKey:key];
  56. }else{
  57. [self setValue:dict[key] forKey:key];
  58. }
  59. }@catch (NSException *exception) {
  60. NSLog(@"except:%@:%@",key,dict[key]);
  61. }
  62. }
  63. return self;
  64. }
  65. - (NSString*) propertyClassName:(NSString*)propertyName{
  66. return nil;
  67. }
  68. @end
  1. 这个demo很简单,用的还是上一篇中的例子。
  1. NSString* jsonString = request.responseString;
  2. NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
  3. NSDictionary *jsonObj = [jsonData objectFromJSONData];
  4. Result* result = [SearchResult objectWithDict:jsonObj withClassName:@"Result"];

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

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

最新文章

  1. slick for play 使用原生sql查询以及拼接sql
  2. sockaddr与sockaddr_in结构体简介
  3. SharePoint 2016 Beta 2 安装体验
  4. ES6中的Class
  5. iOS NSFileManager
  6. wchar_t 和 char 之间转换
  7. 空对象模式(Null Object Pattern)
  8. 动态添加JS文件到页面
  9. 【UVALive - 3713】Astronauts (2-SAT)
  10. Android简单的聊天室开发(client与server沟通)
  11. ABP入门系列目录——学习Abp框架之实操演练
  12. 20145236《网络对抗》进阶实验——64位Ubuntu 17.10.1 ROP攻击
  13. VMware卸载有残留,再安装时报错提示MSI Failed
  14. mvc,EntityFramework调用分页存储过程
  15. 雷林鹏分享:查看 XML 文件
  16. Opencv-Python 图像透视变换cv2.warpPerspective
  17. js第三天知识点 循环
  18. 【转】npm install、npm install --save与npm install --save-dev区别
  19. mysql数据库的左连接,右连接,内链接。
  20. c动态分配结构体二维数组

热门文章

  1. java json与map互相转换(二)
  2. qtp descriptive programming multiple language(多语言支持)
  3. 查询后n条记录
  4. 转 linux下php扩展mysqli的支持
  5. 编程填空:左边i位取反
  6. 转:OGRE 渲染通路(Pass)
  7. spring 自动装配 default-autowire="byName/byType"
  8. 用vs调试sql存储过程
  9. 【java】详解JFrame结构的分层
  10. numpy中的np.random.mtrand.RandomState