这个是对上面一篇写的一个解析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这个方法就行。这样就可以找到正确的类进行解析了。
 

ios中解析json对象基类的更多相关文章

  1. iOS中解析json多种方法

    我感觉JSON解析,重要的是JSON解析之后对结果的处理JSON解析后是个dictionary,但是字典中有可能包含字典和数组,数组中还可以包含字典.向客户端请求的返回数据解析下面就简单介绍一下JSO ...

  2. js中解析json对象:JSON.parse()用于从一个字符串中解析出json对象, JSON.stringify()用于从一个对象解析出字符串。

    JSON.parse()用于从一个字符串中解析出json对象. var str = '{"name":"huangxiaojian","age&quo ...

  3. 利用PBFunc在Powerbuilder中解析Json对象

    利用PBFunc工具在Powerbuilder解析json,只需要调用getattribute方法来获取 解析unicode格式的json: n_pbfunc_json lnv_json lnv_js ...

  4. 在ios中解析json数据

    刚刚下午那会 弄了个 解析 xml  demo的小例子,本想着json也挺复杂 弄还是 不弄,但是简单的看了下 发现挺简单 考虑了很久,还是写上来吧,毕竟json用得太多了,而且算是自己的积累吧,毕竟 ...

  5. iOS中解析 XML / JSON

    JSON数据格式 1. 概述: JSON (JavaScript Object Notation) 是⼀一种轻量级的数据交换格式 基于⽂文本格式,易于⼈人阅读和编写,同时也易于机器解析和⽣生成. 2. ...

  6. winform中利用反射实现泛型数据访问对象基类(1)

    考虑到软件使用在客户端,同时想简化代码的实现,就写了一个泛型的数据访问对象基类,并不是特别健全,按道理应该参数化的方式实现insert和update,暂未使用参数化,抽时间改进. /// <su ...

  7. jquery遍历筛选数组的几种方法和遍历解析json对象

    jquery grep()筛选遍历数组 $().ready(    function(){        var array = [1,2,3,4,5,6,7,8,9];        var fil ...

  8. 类转json的基类实现

    类转json的基类实现 项目地址 github地址 实现原理 使用反射获取类的属性名和属性内容.具体原理可以自己查一下资料 对一个类调用getClass().getDeclaredFields()可以 ...

  9. js中的json对象详细介绍

    JSON一种简单的数据格式,比xml更轻巧,在JavaScript中处理JSON数据不需要任何特殊的API或工具包,下面为大家详细介绍下js中的json对象, 1.JSON(JavaScript Ob ...

随机推荐

  1. Linux开机启动时执行脚本的方法

    方法 1 – 使用 rc.local利用 /etc/ 中的 rc.local 文件在启动时执行脚本与命令.我们在文件中加上一行来执行脚本,这样每次启动系统时,都会执行该脚本.不过我们首先需要为 /et ...

  2. 管理多tomcat实例的shell脚本

    为了简化tomcat的部署复杂度, 把以前单独配置的脚本提出来做了一个带参数的, 可以用于单机环境下的多tomcat实例管理. 其中deploy功能, 会将指定的模块war按日期时间更名备份后, 再部 ...

  3. Path画直线与弧线

    代码地址如下:http://www.demodashi.com/demo/14754.html 前言 之前讲过Paint和Canvas的基本使用,今天来介绍下Path的使用 涉及内容有: Path画直 ...

  4. JavaScript判断是否全为中文,是否含有中文

    来源于:http://blog.csdn.net/yenange/article/details/7463897 第一种代码(全为中文则返回"true",不全为中文则返回" ...

  5. Emacs中Golang的设置

    欲善其事,先利其器.下面记录一些使用Emacs24做golang开发中的一些有用设置,备忘用. 一,golang中的代码跳转 emacs24的go-mode中默认用godef-describe,god ...

  6. 修改主键id为自增

    详见:sqlserver修改主键为自增 先删除id字段, 执行下面sql即可: alter table sms_rec add id int IDENTITY (1,1) PRIMARY KEY

  7. 关于CASE WHEN的多条件汇总问题

    https://bbs.csdn.net/topics/392217817?page=1 问题: --创建测试表 IF EXISTS (SELECT * FROM sys.objects WHERE ...

  8. hibernate关联映射注解

    转自:hibernate annotation注解方式来处理映射关系 在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说 ...

  9. Android轻量级ORM框架ActiveAndroid入门教程(转)

    注:没有找到出处,如有侵犯,请告知 开始ActiveAndroid神奇之旅: 在AndroidManifest.xml中我们需要添加这两个 AA_DB_NAME (数据库名称,这个name不能改,但是 ...

  10. [Spring学习笔记 6 ] Spring JDBC 详解

    项目使用maven管理,pom.xml和项目组织如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...