JSONModel的基本使用

JSONModel 是一個庫,它能智能并且快速的創建出數據 model,你可以在你的 iOS 項目或者 OSX 項目上使用它。

使用前準備

添加 JSONModel 到你的工程中

1、需要的環境:

  • ARC,iOS 5.0+ / OSX 10.7 +
  • 引入框架SystemConfiguration.framework

2、獲取途徑:

  1)、通過源文件獲取* 下載 JSONModel zip包*  將 JSONModel 文件夾拷貝到你的工程項目中*  將庫 SystemConfiguration.framework 添加上         2)、使用 Cocoa pods 來安裝:pod 'JSONModel'

3、源碼的文檔:

源碼本身包含了類的文檔,你可以自己編譯后導入到你的Xcode中:

  • 如果你還沒安裝 appledoc ,先安裝 appledoc
  • 在Xcode上鍵入 appledoc 安裝文檔,在根目錄下
  • 重啟Xcode

基本使用

假設你的 JSON 串像下面這樣子:

{"id":"10", "country":"Germany", "dialCode": 49, "isInEurope":true}
  • 創建一個你自己的類,并繼承至 JSONModel
  • 在你的頭文件里面進行聲明你所需要的 JSON key值
#import "JSONModel.h"@interface CountryModel : JSONModel@property (assign, nonatomic) int id;
@property (strong, nonatomic) NSString* country;
@property (strong, nonatomic) NSString* dialCode;
@property (assign, nonatomic) BOOL isInEurope;@end

.m文件中你不需要做其他的事情了.

初始化你的 model ,如下所示:

#import "CountryModel.h"
...NSString* json = (fetch here JSON from Internet) ... 
NSError* err = nil;
CountryModel* country = [[CountryModel alloc] initWithString:json error:&err];

如果傳過來的 JSON 合法,你所定義的所有的屬性都會與該 JSON 值相匹配,并且 JSONModel 也會嘗試盡可能的轉換成你所想要的數據,就像上面的例子:

  • 轉化 "id",從字符串轉換成 int 型
  • 拷貝 country 屬性的值
  • 轉換 dialCode ,從NSNumber 轉換為 NSString 值
  • 最后一個呢是將 isInEurope 轉換成 BOOL 的屬性

所以,你需要做的就是定義出你期望的屬性就行了。

例子

命名自動匹配

{"id": "123","name": "Product name","price": 12.95
}
@interface ProductModel : JSONModel@property (assign, nonatomic) int id;
@property (strong, nonatomic) NSString* name;
@property (assign, nonatomic) float price;@end@implementation ProductModel@end

model中含有其他的model

{"order_id": 104,"total_price": 13.45,"product" : {"id": "123","name": "Product name","price": 12.95}
}
@interface OrderModel : JSONModel@property (assign, nonatomic) int order_id;
@property (assign, nonatomic) float total_price;
@property (strong, nonatomic) ProductModel* product;@end@implementation OrderModel@end

model中含有其他model的集合

{"order_id": 104,"total_price": 103.45,"products" : [{"id": "123","name": "Product #1","price": 12.95},{"id": "137","name": "Product #2","price": 82.95}]
}
@protocol ProductModel@end@interface ProductModel : JSONModel@property (assign, nonatomic) int id;
@property (strong, nonatomic) NSString* name;
@property (assign, nonatomic) float price;@end@implementation ProductModel@end@interface OrderModel : JSONModel@property (assign, nonatomic) int order_id;
@property (assign, nonatomic) float total_price;
@property (strong, nonatomic) NSArray<ProductModel>* products;@end@implementation OrderModel@end

鍵值轉回匹配

{"order_id": 104,"order_details" : [{"name": "Product#1","price": {"usd": 12.95}}]
}
@interface OrderModel : JSONModel@property (assign, nonatomic) int id;
@property (assign, nonatomic) float price;
@property (strong, nonatomic) NSString* productName;@end@implementation OrderModel+ (JSONKeyMapper*)keyMapper
{return [[JSONKeyMapper alloc] initWithDictionary:@{@"order_id": @"id",@"order_details.name": @"productName",@"order_details.price.usd": @"price"}];
}@end

設置全局的鍵值轉回匹配

[JSONModel setGlobalKeyMapper:[[JSONKeyMapper alloc] initWithDictionary:@{@"item_id":@"ID",@"item.name": @"itemName"}]
];

將下滑線轉換成首字母大寫

{"order_id": 104,"order_product" : @"Product#1","order_price" : 12.95
}
@interface OrderModel : JSONModel@property (assign, nonatomic) int orderId;
@property (assign, nonatomic) float orderPrice;
@property (strong, nonatomic) NSString* orderProduct;@end@implementation OrderModel+ (JSONKeyMapper*)keyMapper
{return [JSONKeyMapper mapperFromUnderscoreCaseToCamelCase];
}@end

可以為空的屬性值

{"id": "123","name": null,"price": 12.95
}
@interface ProductModel : JSONModel@property (assign, nonatomic) int id;
@property (strong, nonatomic) NSString<Optional>* name;
@property (assign, nonatomic) float price;
@property (strong, nonatomic) NSNumber<Optional>* uuid;@end@implementation ProductModel@end

忽略某些屬性

{"id": "123","name": null
}
@interface ProductModel : JSONModel@property (assign, nonatomic) int id;
@property (strong, nonatomic) NSString<Ignore>* customProperty;@end@implementation ProductModel@end

讓所有的屬性都可以有空的屬性值

@implementation ProductModel+ (BOOL)propertyIsOptional:(NSString*)propertyName
{return YES;
}@end

將集合元素轉換成 model

{"order_id": 104,"total_price": 103.45,"products" : [{"id": "123","name": "Product #1","price": 12.95},{"id": "137","name": "Product #2","price": 82.95}]
}
@protocol ProductModel@end@interface ProductModel : JSONModel@property (assign, nonatomic) int id;
@property (strong, nonatomic) NSString* name;
@property (assign, nonatomic) float price;@end@implementation ProductModel@end@interface OrderModel : JSONModel@property (assign, nonatomic) int order_id;
@property (assign, nonatomic) float total_price;
@property (strong, nonatomic) NSArray<ProductModel, ConvertOnDemand>* products;@end@implementation OrderModel@end

轉載于:https://www.cnblogs.com/iyou/p/4861666.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/256620.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/256620.shtml
英文地址,請注明出處:http://en.pswp.cn/news/256620.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

圖像處理 伽瑪校正

http://blog.csdn.net/lichengyu/article/details/20840135 本質上是關于灰度的一個冪函數&#xff0c;當系數gamma大于1時&#xff0c;低灰度值的動態范圍減小&#xff0c;高灰度值的動態范圍增大&#xff0c;整體的灰度值減小&#xff1b;gamma小于1時則相反&#xff1b; 人…

matlab常用工具箱的調用指令

轉自:http://blog.sina.com.cn/s/blog_86186c970102va9g.html Matlab常用工具箱的調用命令 1. 優化工具箱?? 用途:優化問題 調用命令:在Command Window輸入“optimtool”?,其窗口如下 圖1 Optimization Tool? 2. 神經網絡工具箱? 用途:數據擬合、模式識別和分類…

tomcat起不來的問題已經解決

tomcat 起不來的問題:\apache-tomcat-6.0.10\bin 中startup.bat 起不來&#xff0c;一閃就沒了。說明&#xff1a;環境變量沒有配置好。解決辦法&#xff1a;配置環境變量&#xff1a;JAVA_HOME C:\Program Files\Java\jdk1.6.0_03就可以解決問題了本文轉自 yuwenhu 51CTO博客…

js寫法【3】

var m[];m[m.length]xx;//相當于push 對Repeat方法提供了8種寫法做比較&#xff0c;這一點還是不錯的。轉載于:https://www.cnblogs.com/baozhu/p/4862242.html

Eclipse設置控制臺日志輸出位置

1、選擇服務器配置 2、設置輸出文件路徑 轉載于:https://www.cnblogs.com/Neil223/p/5759693.html

現代制造工程——第七章(軋制和鍛造)

考點基于書本以及PPT的題目 一、軋制 二、鍛造

圖像邊緣梯度的定義

http://blog.csdn.net/u014020344/article/details/50196635

Jquery_JQuery之DataTables強大的表格解決方案

1、DataTables的默認配置 $(document).ready(function() { $(‘#example’).dataTable(); } ); 示例&#xff1a;http://www.guoxk.com/html/DataTables/Zero-configuration.html 2、DataTables的一些基礎屬性配置 “bPaginate”: true, //翻頁功能 “bLengthChange”: true, /…

內存管理1retain和release

Student.h: #import <Foundation/Foundation.h> interface Student : NSObject property int age; //默認會生成一個_age屬性 end Student.m: #import "Student.h" implementation Student //synthesize age_age;//xcode4.5中可以不使用synthesise方法&a…

目標檢測的圖像特征提取之(一)Hog特征提取

Hog特征實質是&#xff1a;梯度的統計信息,即針對邊緣作特征提取 意義&#xff1a;目標的表象和形狀 轉載于zouxy09大神的文章&#xff0c;加上自己些微的理解和應用&#xff01; http://blog.csdn.net/zouxy09/article/details/7929348/ 上述基本講清楚了&#xff0c;其實…

redis類型[string 、list 、 set 、sorted set 、hash]

1. Keys redis本質上一個key-value db&#xff0c;所以我們首先來看看他的key. 首先key也是字符串類型&#xff0c;但是key中不能包括邊界字符&#xff1b;由于key不是binary safe的字符串&#xff0c;所以像"my key"和"mykey\n"這樣包含空格和換行的key是…

matlab simulink筆記02——延遲模塊delay與單位延遲模塊unit delay

延遲模塊 單位延遲模塊 延遲模塊具有復位功能,當滿足復位條件時會進行復位操作,即輸出的值會恢復到初始值,而單位延遲模塊沒有復位功能; 延遲模塊的步長是可以設置的,而單位延遲模塊的步長固定為1,不可以改變

局域網傳輸速度升級

現在很多單位都建成了企業內部局域網&#xff0c;一般的企業網絡大多是使用雙 絞線連接網卡的方式來進行通信的。其中雙絞線通常采用的都是5類線&#xff0c;傳輸速率為100MB。而網卡則有一定的區別&#xff0c;很多網卡都是采取 10Mbps/100Mbmps自適應的網卡&#xff0c;即傳輸…

數據結構--棧 codevs 1107 等價表達式

codevs 1107 等價表達式 2005年NOIP全國聯賽提高組 時間限制: 1 s空間限制: 128000 KB題目等級 : 鉆石 Diamond題目描述 Description明明進了中學之后&#xff0c;學到了代數表達式。有一天&#xff0c;他碰到一個很麻煩的選擇題。這個題目的題干中首先給出了一個代數表達式&am…

目標檢測的圖像特征提取之(二)LBP特征

LBP特征實質是&#xff1a;圖像局部特征的提取 意義&#xff1a;紋理的提取 http://blog.csdn.net/zouxy09/article/details/7929531 1&#xff09;首先將檢測窗口劃分為1616的小區域&#xff08;cell&#xff09;&#xff1b; &#xff08;2&#xff09;對于每個cell中的一個…

VS2010安裝幫助文檔出現錯誤

安裝VS2010后的幫助文檔安裝出現錯誤:未能在指定文件夾中創建本地存儲區 安裝完VS2010后&#xff0c;出現錯誤&#xff0c;取消后 再安裝MSDN 打開“Help Library 管理器 - Microsoft Help 查看器 1.0” 提示“請為本地內容選擇位置” 默認的位置是在“C:\Documents and Settin…

matlab smulink筆記03——過零檢測

★過零檢測 變步長解算方法動態地評估計算下一個采樣時刻所使用的步長&#xff0c;當前后兩個采 樣點的狀態值變化大時&#xff0c;則縮小采樣步長&#xff0c;當前后兩個采樣點的值變化小時則增大步 這種做法使得解算器在計算不連續臨近區域時使用較小的步長&#xff0c;因為不…

電腦下鄉的遐想

最近討論家電下鄉的話題很熱&#xff0c;其中我個人最關心“電腦下鄉”。原因是&#xff0c;我是農村人&#xff0c;正好在電腦相關行業里混。 應當說&#xff0c;讓電腦下鄉是我多年的夢想&#xff0c;我多么盼望鄉下的鄉親們能夠上網看新聞、學習、看電視……但是&#xff0c…

angularjs學習曲線

angularjs學習曲線 剛開始學Augular覺得開發應用需要有相當的編程基礎. 不得不說這確實是一款了不起的開發框架&#xff0c;它要求開發人員設計低耦合和可維護的應用. 使用AngularJS 的復雜度就像使用PHP&#xff0c;Ruby on Rails等等, 都需要處理依賴注入&#xff0c;路由&am…