- 浏览: 24685 次
- 性别:
- 来自: 沈阳
文章分类
最新评论
MJExtension能做什么?
MJExtension是一套字典和模型之间互相转换的超轻量级框架
MJExtension能完成的功能
字典(JSON) --> 模型(Model)
模型(Model) --> 字典(JSON)
字典数组(JSON Array) --> 模型数组(Model Array)
模型数组(Model Array) --> 字典数组(JSON Array)
详尽用法主要参考 main.m中的各个函数 以及 NSObject+MJKeyValue.h
MJExtension和JSONModel、Mantle等框架的区别
1. 转换速率:
最近一次测试表明:MJExtension > JSONModel > Mantle
各位开发者也可以自行测试
2.具体用法:
JSONModel:
要求所有模型类必须继承自JSONModel基类
Mantle:
要求所有模型类必须继承自MTModel基类
MJExtension:
不需要你的模型类继承任何特殊基类,毫无污染,毫无侵入性
如何使用MJExtension
方法一:cocoapods导入:pod 'MJExtension'
方法二:手动导入:
将MJExtensionExample/MJExtensionExample/MJExtension文件夹中的所有源代码拽入项目中
导入主头文件:
1.最简单的字典转模型
核心代码1:
2.模型中嵌套模型
核心代码2
3.模型中有个数组属性,数组里面又要装着其它模型
核心代码3:
在模型内部实现+ (NSDictionary *)objectClassInArray方法
4.模型中的属性名和字典中的key不相同(或者需要多级映射)
核心代码4:
在模型内部实现+ (NSDictionary *)replacedKeyFromPropertyName方法
5.将一个字典数组转成模型数组
核心代码5:
6.将一个模型转成字典
核心代码6:
7.将一个模型数组转成字典数组
核心代码7:
原文链接:http://www.jianshu.com/p/93c242452b9b
MJExtension是一套字典和模型之间互相转换的超轻量级框架
MJExtension能完成的功能
字典(JSON) --> 模型(Model)
模型(Model) --> 字典(JSON)
字典数组(JSON Array) --> 模型数组(Model Array)
模型数组(Model Array) --> 字典数组(JSON Array)
详尽用法主要参考 main.m中的各个函数 以及 NSObject+MJKeyValue.h
MJExtension和JSONModel、Mantle等框架的区别
1. 转换速率:
最近一次测试表明:MJExtension > JSONModel > Mantle
各位开发者也可以自行测试
2.具体用法:
JSONModel:
要求所有模型类必须继承自JSONModel基类
Mantle:
要求所有模型类必须继承自MTModel基类
MJExtension:
不需要你的模型类继承任何特殊基类,毫无污染,毫无侵入性
如何使用MJExtension
方法一:cocoapods导入:pod 'MJExtension'
方法二:手动导入:
将MJExtensionExample/MJExtensionExample/MJExtension文件夹中的所有源代码拽入项目中
导入主头文件:
#import "MJExtension.h" MJExtension.h MJConst.h MJConst.m MJFoundation.h MJFoundation.m MJIvar.h MJIvar.m MJType.h MJType.m NSObject+MJCoding.h NSObject+MJCoding.m NSObject+MJIvar.h NSObject+MJIvar.m NSObject+MJKeyValue.h NSObject+MJKeyValue.m
1.最简单的字典转模型
typedef enum { SexMale, SexFemale} Sex; @interface User : NSObject @property (copy, nonatomic) NSString *name; @property (copy, nonatomic) NSString *icon; @property (assign, nonatomic) int age; @property (assign, nonatomic) double height; @property (strong, nonatomic) NSNumber *money; @property (assign, nonatomic) Sex sex; @end NSDictionary *dict = @{ @"name" : @"Jack", @"icon" : @"lufy.png", @"age" : @20, @"height" : @"1.55", @"money" : @100.9, @"sex" : @(SexFemale) }; // 将字典转为User模型 User *user = [User objectWithKeyValues:dict]; NSLog(@"name=%@, icon=%@, age=%d, height=%@, money=%@, sex=%d", user.name, user.icon, user.age, user.height, user.money, user.sex); // name=Jack, icon=lufy.png, age=20, height=1.550000, money=100.9, sex=1
核心代码1:
[User objectWithKeyValues:dict]
2.模型中嵌套模型
@interface Status : NSObject /** 微博文本内容 */ @property (copy, nonatomic) NSString *text; /** 微博作者 */ @property (strong, nonatomic) User *user; /** 转发的微博 */ @property (strong, nonatomic) Status *retweetedStatus; @end NSDictionary *dict = @{ @"text" : @"是啊,今天天气确实不错!", @"user" : @{ @"name" : @"Jack", @"icon" : @"lufy.png" }, @"retweetedStatus" : @{ @"text" : @"今天天气真不错!", @"user" : @{ @"name" : @"Rose", @"icon" : @"nami.png" } } }; // 将字典转为Status模型 Status *status = [Status objectWithKeyValues:dict]; NSString *text = status.text; NSString *name = status.user.name; NSString *icon = status.user.icon; NSLog(@"text=%@, name=%@, icon=%@", text, name, icon); // text=是啊,今天天气确实不错!, name=Jack, icon=lufy.png NSString *text2 = status.retweetedStatus.text; NSString *name2 = status.retweetedStatus.user.name; NSString *icon2 = status.retweetedStatus.user.icon; NSLog(@"text2=%@, name2=%@, icon2=%@", text2, name2, icon2); // text2=今天天气真不错!, name2=Rose, icon2=nami.png
核心代码2
[Status objectWithKeyValues:dict]
3.模型中有个数组属性,数组里面又要装着其它模型
@interface Ad : NSObject @property (copy, nonatomic) NSString *image; @property (copy, nonatomic) NSString *url; @end @interface StatusResult : NSObject /** 存放着一堆的微博数据(里面都是Status模型) */ @property (strong, nonatomic) NSMutableArray *statuses; /** 存放着一堆的广告数据(里面都是Ad模型) */ @property (strong, nonatomic) NSArray *ads; @property (strong, nonatomic) NSNumber *totalNumber; @end @implementation StatusResult // 实现这个方法的目的:告诉MJExtension框架statuses和ads数组里面装的是什么模型 /* + (NSDictionary *)objectClassInArray{ return @{ @"statuses" : [Status class], @"ads" : [Ad class] }; } + (Class)objectClassInArray:(NSString *)propertyName{ if ([propertyName isEqualToString:@"statuses"]) { return [Status class]; } else if ([propertyName isEqualToString:@"ads"]) { return [Ad class]; } return nil;} */ // 这个方法对比上面的2个方法更加没有侵入性和污染,因为不需要导入Status和Ad的头文件 + (NSDictionary *)objectClassInArray{ return @{ @"statuses" : @"Status", @"ads" : @"Ad" }; } @end NSDictionary *dict = @{ @"statuses" : @[ @{ @"text" : @"今天天气真不错!", @"user" : @{ @"name" : @"Rose", @"icon" : @"nami.png" } }, @{ @"text" : @"明天去旅游了", @"user" : @{ @"name" : @"Jack", @"icon" : @"lufy.png" } } ], @"ads" :@[ @{ @"image" : @"ad01.png", @"url" : @"http://www.ad01.com" }, @{ @"image" : @"ad02.png", @"url" : @"http://www.ad02.com" } ], @"totalNumber" : @"2014" }; // 将字典转为StatusResult模型 StatusResult *result = [StatusResult objectWithKeyValues:dict]; NSLog(@"totalNumber=%@", result.totalNumber); // totalNumber=2014 // 打印statuses数组中的模型属性 for (Status *status in result.statuses) { NSString *text = status.text; NSString *name = status.user.name; NSString *icon = status.user.icon; NSLog(@"text=%@, name=%@, icon=%@", text, name, icon);} // text=今天天气真不错!, name=Rose, icon=nami.png // text=明天去旅游了, name=Jack, icon=lufy.png // 打印ads数组中的模型属性 for (Ad *ad in result.ads) { NSLog(@"image=%@, url=%@", ad.image, ad.url);} // image=ad01.png, url=http://www.ad01.com // image=ad02.png, url=http://www.ad02.com
核心代码3:
在模型内部实现+ (NSDictionary *)objectClassInArray方法
[StatusResult objectWithKeyValues:dict]
4.模型中的属性名和字典中的key不相同(或者需要多级映射)
@interface Bag : NSObject @property (copy, nonatomic) NSString *name; @property (assign, nonatomic) double price;@end@interface Student : NSObject @property (copy, nonatomic) NSString *ID; @property (copy, nonatomic) NSString *desc; @property (copy, nonatomic) NSString *nowName; @property (copy, nonatomic) NSString *oldName; @property (copy, nonatomic) NSString *nameChangedTime; @property (strong, nonatomic) Bag *bag; @end @implementation Student // 实现这个方法的目的:告诉MJExtension框架模型中的属性名对应着字典的哪个key + (NSDictionary *)replacedKeyFromPropertyName{ return @{ @"ID" : @"id", @"desc" : @"desciption", @"oldName" : @"name.oldName", @"nowName" : @"name.newName", @"nameChangedTime" : @"name.info.nameChangedTime", @"bag" : @"other.bag" }; } @end NSDictionary *dict = @{ @"id" : @"20", @"desciption" : @"孩子", @"name" : @{ @"newName" : @"lufy", @"oldName" : @"kitty", @"info" : @{ @"nameChangedTime" : @"2013-08" } }, @"other" : @{ @"bag" : @{ @"name" : @"小书包", @"price" : @100.7 } } }; // 将字典转为Student模型 Student *stu = [Student objectWithKeyValues:dict]; // 打印Student模型的属性 NSLog(@"ID=%@, desc=%@, oldName=%@, nowName=%@, nameChangedTime=%@", stu.ID, stu.desc, stu.oldName, stu.nowName, stu.nameChangedTime); // ID=20, desc=孩子, oldName=kitty, nowName=lufy, nameChangedTime=2013-08 NSLog(@"bagName=%@, bagPrice=%f", stu.bag.name, stu.bag.price); // bagName=小书包, bagPrice=100.700000
核心代码4:
在模型内部实现+ (NSDictionary *)replacedKeyFromPropertyName方法
[Student objectWithKeyValues:dict]
5.将一个字典数组转成模型数组
NSArray *dictArray = @[ @{ @"name" : @"Jack", @"icon" : @"lufy.png", }, @{ @"name" : @"Rose", @"icon" : @"nami.png", } ]; // 将字典数组转为User模型数组 NSArray *userArray = [User objectArrayWithKeyValuesArray:dictArray]; // 打印userArray数组中的User模型属性 for (User *user in userArray) { NSLog(@"name=%@, icon=%@", user.name, user.icon);} // name=Jack, icon=lufy.png // name=Rose, icon=nami.png
核心代码5:
[User objectArrayWithKeyValuesArray:dictArray]
6.将一个模型转成字典
// 新建模型 User *user = [[User alloc] init]; user.name = @"Jack"; user.icon = @"lufy.png"; Status *status = [[Status alloc] init]; status.user = user; status.text = @"今天的心情不错!"; // 将模型转为字典 NSDictionary *statusDict = status.keyValues; NSLog(@"%@", statusDict); /*{ text = "今天的心情不错!"; user = { icon = "lufy.png"; name = Jack; }; }*/ // 多级映射的模型 Student *stu = [[Student alloc] init]; stu.ID = @"123"; stu.oldName = @"rose"; stu.nowName = @"jack"; stu.desc = @"handsome"; stu.nameChangedTime = @"2018-09-08"; Bag *bag = [[Bag alloc] init]; bag.name = @"小书包"; bag.price = 205; stu.bag = bag; NSDictionary *stuDict = stu.keyValues;NSLog(@"%@", stuDict); /* { desciption = handsome; id = 123; name = { info ={ nameChangedTime = "2018-09-08"; }; newName = jack; oldName = rose; }; other = { bag ={ name = "小书包"; price = 205; }; }; } */
核心代码6:
status.keyValues、stu.keyValues
7.将一个模型数组转成字典数组
// 新建模型数组 User *user1 = [[User alloc] init]; user1.name = @"Jack"; user1.icon = @"lufy.png"; User *user2 = [[User alloc] init]; user2.name = @"Rose"; user2.icon = @"nami.png"; NSArray *userArray = @[user1, user2]; // 将模型数组转为字典数组 NSArray *dictArray = [User keyValuesArrayWithObjectArray:userArray]; NSLog(@"%@", dictArray); /*( { icon = "lufy.png"; name = Jack; }, { icon = "nami.png"; name = Rose; } )*/
核心代码7:
[User keyValuesArrayWithObjectArray:userArray]
原文链接:http://www.jianshu.com/p/93c242452b9b
相关推荐
MJExtension
这是我自己写的一个第三方MJExtension的代码例子,可以参考一下
为了简化这一过程,开发者可以使用开源库"MJExtension"来实现一键式的JSON转模型。"MJExtension"是一款非常流行的iOS开源库,它能够帮助开发者快速地将JSON数据转换为模型对象,同时支持模型对象转换为JSON数据。...
MJ大神的轻量级数据模型转换,通过runtime自动赋值,深度结构一次性赋值,方便快捷
MJExtension工具类
Swift版的MJExtension,运行时、反射与一键字典模型互转.zip,重磅推出:Swift版的MJExtension,运行时、反射与一键字典模型互转
iOS 超轻量级框架 MJExtension ,MJExtension 是 JSON 和模型之间最快捷方便的转换。
MJExtension 是一个超轻量级的框架,可以在字典和模型之间进行转换。 仅用一行代码编写模型的所有属性。 只需一行代码即可实现模型所有属性的编码(存档和取消存档)。 @objcattributes 应该添加到类和属性中以声明...
MJExtension.zip,A fast, convenient and nonintrusive conversion framework between JSON and model. Your model class doesn't need to extend any base class. You don't need to modify any model file.
如果你的项目是用Swift写的Model,墙裂推荐使用已经对各种常用的数据场景进行扩展的单元测试简单易用,功能丰富,转换快速在Swift中使用框架[关于在Swift中使用MJExtension] ! 例: ! @objc属性应添加到类和属性中...
MJExtension是一套“字典和模型之间互相转换”的轻量级框架。 MJExtension是一套“字典和模型之间互相转换”的轻量级框架。
在程序中经常需要把一些信息保存到本地,如登录信息,MJExtension框架不仅可以可以将JSON转换为Model同时也可以借助该框架完成归档与反归档。本demo中的Wearinfo类可以直接移植到项目中直接使用。
使用IOS5自带解析类NSJSONSerialization方法把数据转换为Json字符串以及解析Json字符串
最近想弄一下网络架构,无意之间发现,后台给的数据有的是null,用MJExtension转换模型之后,模型属性会为null。网上查了一下也没有什么好的去null方法,就自己写了一个。 这个demo也有一些MJExtension的常用法,...
html简单网页代码 高仿新浪微博访客视图,首页,发布界面等使用技术:MVVM设计模式,使用纯代码和Xib混合开发,使用SnapKit做UI布局,AFN网络数据请求,MJExtension进行字典转模型数据,使用SDWebImage进行图片加载...
MJExtensionSwift 快速 方便 无损伤的JSON和模型之间的转换。您的模型类不需要扩展另一个基类。您不需要修改任何模型文件
源码IMNetworking,由XML配置网络请求,指定网络返回类型 由 MJExtension 解析成所需类型。设置网络默认配置,超时时间,超时和网络请求错误提示文字 等。IMNetworking 基于 AFNetworking 和 MJExtension 进行开发,...
里面写的是毛玻璃的demo,另外给新手写了个JSON和模型之间的转换(CoderMJLee/MJExtension),打开数据结构图片和MyModelManager文件可以对照模型的转换,让你一目了然