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这个方法就行。这样就可以找到正确的类进行解析了。
ios中解析json对象基类的更多相关文章
- iOS中解析json多种方法
我感觉JSON解析,重要的是JSON解析之后对结果的处理JSON解析后是个dictionary,但是字典中有可能包含字典和数组,数组中还可以包含字典.向客户端请求的返回数据解析下面就简单介绍一下JSO ...
- js中解析json对象:JSON.parse()用于从一个字符串中解析出json对象, JSON.stringify()用于从一个对象解析出字符串。
JSON.parse()用于从一个字符串中解析出json对象. var str = '{"name":"huangxiaojian","age&quo ...
- 利用PBFunc在Powerbuilder中解析Json对象
利用PBFunc工具在Powerbuilder解析json,只需要调用getattribute方法来获取 解析unicode格式的json: n_pbfunc_json lnv_json lnv_js ...
- 在ios中解析json数据
刚刚下午那会 弄了个 解析 xml demo的小例子,本想着json也挺复杂 弄还是 不弄,但是简单的看了下 发现挺简单 考虑了很久,还是写上来吧,毕竟json用得太多了,而且算是自己的积累吧,毕竟 ...
- iOS中解析 XML / JSON
JSON数据格式 1. 概述: JSON (JavaScript Object Notation) 是⼀一种轻量级的数据交换格式 基于⽂文本格式,易于⼈人阅读和编写,同时也易于机器解析和⽣生成. 2. ...
- winform中利用反射实现泛型数据访问对象基类(1)
考虑到软件使用在客户端,同时想简化代码的实现,就写了一个泛型的数据访问对象基类,并不是特别健全,按道理应该参数化的方式实现insert和update,暂未使用参数化,抽时间改进. /// <su ...
- jquery遍历筛选数组的几种方法和遍历解析json对象
jquery grep()筛选遍历数组 $().ready( function(){ var array = [1,2,3,4,5,6,7,8,9]; var fil ...
- 类转json的基类实现
类转json的基类实现 项目地址 github地址 实现原理 使用反射获取类的属性名和属性内容.具体原理可以自己查一下资料 对一个类调用getClass().getDeclaredFields()可以 ...
- js中的json对象详细介绍
JSON一种简单的数据格式,比xml更轻巧,在JavaScript中处理JSON数据不需要任何特殊的API或工具包,下面为大家详细介绍下js中的json对象, 1.JSON(JavaScript Ob ...
随机推荐
- ROS中发布激光扫描消息
激光雷达工作时会先在当前位置发出激光并接收反射光束,解析得到距离信息,而后激光发射器会转过一个角度分辨率对应的角度再次重复这个过程.限于物理及机械方面的限制,激光雷达通常会有一部分“盲区”.使用激光雷 ...
- Excel之定位和查找
在数据量比较少的情况下,我们要到达Excel中某一位置时,通常会用鼠标拖动滚动条到达需要的位置,查找某已知固定的值,用Ctr+F,在查找内容中输入对应的值即可一个个的查找到其对应的位置.但当数据量较多 ...
- Ajax学习(一)
ajax是什么? Asynchronous Javascript And XML:异步的js和xml 他能使得js访问服务器,而且是异步的. 服务器给客户端的响应一般是整个页面,一个完整的html页面 ...
- OpenCV学习代码记录——canny边缘检测
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...
- CentOS7 下 配置Docker远程访问 与 windows下使用maven构筑Spring Boot 的 Docker镜像到远程服务端
1.设置Docker服务端,以支持远程访问: 修改docker服务端配置文件,命令: vim /usr/lib/systemd/system/docker.service 修改后: [Unit] De ...
- Appium原理及版本变化细节
Appium原理小结 Api接口调用selenium的接口,Android底层用android的instrumentation(API2.3+ 通过绑定另外一个独立的selendroid项目来实现的) ...
- asp.net 如何配置authentication,完成基于表单的身份验证
步骤一: 在根目录下的web.config中加入: <system.web> <authentication mode="Forms"> ...
- 架构-到底什么时候该使用MQ【转】
点击:<查看原文> 一.缘起 一切脱离业务的架构设计与新技术引入都是耍流氓. 引入一个技术之前,首先应该解答的问题是,这个技术解决什么问题. 就像微服务分层架构之前,应该首先回答,为什么要 ...
- Linux系统vi编辑器提示E325: ATTENTION的解决方法
非正常关闭文件会报这样的警告信息, 原因是系统产生了一个.swp的文件. 删除就行了.(前提是确认.swp文件没用了.) 例如: rm -f /etc/.shadowsocks.json.swp 详情 ...
- iOS 开发 Pch 文件的正确使用
在Xcode6之前,创建一个新工程xcode会在Supporting files文件夹下面自动创建一个“工程名-Prefix.pch”文件,也是一个头文件,pch头文件的内容能被项目中的其他所有源文件 ...