iOS --- 使用runtime将JSON转换成Model
2016-07-26 22:33
561 查看
这里简单介绍如何使用runtime将JSON转换成Model.
实现文件:
其中的代码也很简单:
使用class_copyPropertyList获取Model的所有属性列表, 遍历该列表使用property_getName即可得到所有属性名.
对于PersonModel中定义的属性, 使用KVC即可将dict中的值赋给该属性.
iOS-RuntimeDemo.
封装initWithNSDictionary:方法
该方法接收NSDictionary对象, 返回PersonModel对象.#pragma mark - 使用runtime将JSON转成Model - (void)json2Model { NSString *file = [[NSBundle mainBundle] pathForResource:@"Persons" ofType:@"json"]; NSData *data = [NSData dataWithContentsOfFile:file]; NSMutableArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil]; for (NSDictionary *model in array) { PersonModel *person = [[PersonModel alloc] initWithNSDictionary:model]; NSLog(@"%@, %ld, %@, %@", person.name, (long)person.age, person.city, person.job); } }
使用runtime实现
PersonModel的头文件如下:#import <Foundation/Foundation.h> @interface PersonModel : NSObject @property (nonatomic, copy) NSString *name; @property (nonatomic, assign) NSInteger age; @property (nonatomic, copy) NSString *city; @property (nonatomic, copy) NSString *job; - (instancetype)initWithNSDictionary:(NSDictionary *)dict; @end
实现文件:
#import "PersonModel.h" #import <objc/runtime.h> @implementation PersonModel - (instancetype)initWithNSDictionary:(NSDictionary *)dict { self = [super init]; if (self) { [self prepareModel:dict]; } return self; } - (void)prepareModel:(NSDictionary *)dict { NSMutableArray *keys = [[NSMutableArray alloc] init]; u_int count = 0; objc_property_t *properties = class_copyPropertyList([self class], &count); for (int i = 0; i < count; i++) { objc_property_t property = properties[i]; const char *propertyCString = property_getName(property); NSString *propertyName = [NSString stringWithCString:propertyCString encoding:NSUTF8StringEncoding]; [keys addObject:propertyName]; } free(properties); for (NSString *key in keys) { if ([dict valueForKey:key]) { [self setValue:[dict valueForKey:key] forKey:key]; } } } @end
其中的代码也很简单:
使用class_copyPropertyList获取Model的所有属性列表, 遍历该列表使用property_getName即可得到所有属性名.
对于PersonModel中定义的属性, 使用KVC即可将dict中的值赋给该属性.
Demo
Demo请参考:iOS-RuntimeDemo.
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 使用 Python 处理 JSON 格式的数据
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- XML 与 JSON 优劣对比
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- VBA将excel数据表生成JSON文件
- newtonsoft.json解析天气数据出错解决方法
- Java Runtime Environment 5.0 Update 12 下载
- C#实现DataTable映射成Model的方法(附源码)
- vbs 解析json jsonp的方法
- Ruby和Ruby on Rails中解析JSON格式数据的实例教程
- Extjs4如何处理后台json数据中日期和时间
- C#实现将类的内容写成JSON格式字符串的方法
- JQuery ajax返回JSON时的处理方式 (三种方式)
- jquery JSON的解析方式示例介绍
- c#版json数据解析示例分享