ios中解析json对象基类
2024-10-21 04:51:32
这个是对上面一篇写的一个解析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这个方法就行。这样就可以找到正确的类进行解析了。
最新文章
- slick for play 使用原生sql查询以及拼接sql
- sockaddr与sockaddr_in结构体简介
- SharePoint 2016 Beta 2 安装体验
- ES6中的Class
- iOS NSFileManager
- wchar_t 和 char 之间转换
- 空对象模式(Null Object Pattern)
- 动态添加JS文件到页面
- 【UVALive - 3713】Astronauts (2-SAT)
- Android简单的聊天室开发(client与server沟通)
- ABP入门系列目录——学习Abp框架之实操演练
- 20145236《网络对抗》进阶实验——64位Ubuntu 17.10.1 ROP攻击
- VMware卸载有残留,再安装时报错提示MSI Failed
- mvc,EntityFramework调用分页存储过程
- 雷林鹏分享:查看 XML 文件
- Opencv-Python 图像透视变换cv2.warpPerspective
- js第三天知识点 循环
- 【转】npm install、npm install --save与npm install --save-dev区别
- mysql数据库的左连接,右连接,内链接。
- c动态分配结构体二维数组
热门文章
- java json与map互相转换(二)
- qtp descriptive programming multiple language(多语言支持)
- 查询后n条记录
- 转 linux下php扩展mysqli的支持
- 编程填空:左边i位取反
- 转:OGRE 渲染通路(Pass)
- spring 自动装配 default-autowire=&;quot;byName/byType&;quot;
- 用vs调试sql存储过程
- 【java】详解JFrame结构的分层
- numpy中的np.random.mtrand.RandomState