iOS JSONModel使用

JSONModel是json轉(zhuǎn)model的第三方開源庫。當(dāng)我們向服務(wù)器發(fā)送一個(gè)請求之后,通過JSONModel把數(shù)據(jù)轉(zhuǎn)成model就可以很方便我們使用了。

pod 'JSONModel'

基本使用方式

例如這一json數(shù)據(jù)

{
   "first" : 1,
   "second": 2,
   "third" : 3,
   "fourth": 4
}

我們定義如下模型.m中可以不做任何處理

#import <JSONModel/JSONModel.h>

@interface OneModel : JSONModel

@property (nonatomic,assign)int     first;
@property (nonatomic,assign)double  second;
@property (nonatomic,assign)float   third;
@property (nonatomic,copy)NSString* fourth;

@end

從json數(shù)據(jù)中我們可以看出,服務(wù)器給我們的數(shù)據(jù)類型都是一致的,而我們定義的數(shù)據(jù)模型中有int、double、float、NSString這4種,我們不需要做任何處理,JSONModel會(huì)幫我們自動(dòng)轉(zhuǎn)換。

JSONValueTransformer類中有如下支持的轉(zhuǎn)換

NSMutableString <-> NSString
NSMutableArray <-> NSArray
NS(Mutable)Array <- JSONModelArray
NSMutableDictionary <-> NSDictionary
NSSet <-> NSArray
BOOL <-> number/string
string <-> number
string <-> url
string <-> time zone
string <-> date
number <-> date
  1. 使用JSONModel時(shí),不需要額外去檢查所要的服務(wù)器屬性是否有返回。JSONModel的initWithDictionary方法會(huì)自動(dòng)去進(jìn)行檢查并處理。

  2. 有效性檢查,如果指定的服務(wù)器返回的某個(gè)字段沒有返回,而且又是必須的, 像下面這樣寫,則會(huì)拋出異常。

//this property is required
@property (nonatomic,copy) NSString* fourth;
因?yàn)槟J(rèn)這個(gè)值是必須的。

一般情況下,我們不想因?yàn)榉?wù)器的某個(gè)值沒有返回(nil)就使程序崩潰, 我們會(huì)加關(guān)鍵字Optional。像這樣

@property (nonatomic,copy) NSString<Optional>* fourth;

如果不想每一條屬性都添加,我們也可以在.m文件中重寫方法

+(BOOL)propertyIsOptional:(NSString *)propertyName{
        return  YES;
}

使用如下方法給model賦值

//假設(shè)responseObject[@"data"]是服務(wù)器返回給我們的數(shù)據(jù)
OneModel *model = [[OneModel alloc]initWithDictionary:responseObject[@"data"] error:nil];

對獲得的model我們可以通過如下方法把它轉(zhuǎn)成字典

-(NSDictionary*)toDictionary;

模型嵌套

#import <JSONModel/JSONModel.h>
#import "TwoModel.h"

@interface OneModel : JSONModel

@property (nonatomic,assign)int     first;
@property (nonatomic,assign)double  second;
@property (nonatomic,assign)float   third;
@property (nonatomic,copy)NSString* fourth;
@property (nonatomic,strong)TwoModel* twoModel;

@end

模型結(jié)合

#import <JSONModel/JSONModel.h>

@protocol OneModel//注意要加上這句
@end
@interface OneModel : JSONModel

@property (nonatomic,assign)int     first;
@property (nonatomic,assign)double  second;
@property (nonatomic,assign)float   third;
@property (nonatomic,copy)NSString<Optional>* fourth;

@end

@interface ThreeModel : JSONModel

@property (nonatomic,assign)NSString<Optional>* id;
@property (nonatomic,strong)NSArray<OneModel,Optional>* one;

@end
#import "OneModel.h"

@implementation OneModel
@end

@implementation ThreeModel
@end

在此附上他人更詳盡的講解

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 前言 如今基本都是客戶端請求服務(wù)器的模式,數(shù)據(jù)傳遞方式基本都使用JSON的字符串方式。然而當(dāng)我們獲取了服務(wù)器發(fā)來的...
    Alibsolute閱讀 5,331評論 6 4
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,083評論 4 61
  • 06:21
    妙手_e126閱讀 176評論 0 0
  • 一場紅塵戀,一份千年緣, 幾縷隔岸相思,隱逸了多少樓臺(tái)舊夢? 在水一方,愿著一身荷香,乘一葉蘭舟, 劃過秦時(shí)明月,...
    布爾喬亞閱讀 223評論 0 0

友情鏈接更多精彩內(nèi)容