成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

無線客戶端框架設計(5.1):將JSON映射為實體對象(iOS)

移動開發 iOS
我所設計的客戶端框架,三個平臺之間互相取長補短,保持統一的思想,而其中最重要的一環就是,面向對象的編程方式。本文為大家介紹iOS如何將JSON映射為實體對象。

iOS開發人員已經習慣于將JSON轉換為字典或者數組來進行操作了,接下來我要做的事情,可能匪夷所思,但是,對WP和Android開發人員而言,他們更傾向于將JSON轉換為實體對象進行操作。

我所設計的客戶端框架,三個平臺之間互相取長補短,保持統一的思想,而其中最重要的一環就是,面向對象的編程方式。

書接上文,我在異步調用完MobileAPI并成功獲取到JSON后,僅僅將其轉換為jsonValue,如下所示:

201309052152.jpg

后續要做的事情,就是把jsonValue轉換為實體對象了。

首先,要說一下JSON的格式。

MobileAPI返回的JSON字符串有幾種格式:

1)單一實體:

a)簡單屬性:

  1.     "userName""baobao"
  2.     "userAge": 18 

b)屬性中有復合屬性,且該復合屬性是另一個自定義實體:

  1.      "UserId": 1, 
  2.      "UserInfo": { 
  3.               "userName""baobao"
  4.        "userAge": 18 

c)屬性中有復合屬性,且該復合屬性是一個數組:

  1.      "Career""IT"
  2.      "Users": [ 
  3.         { 
  4.              "userName""Bill.Gates"
  5.              "userAge": 60 
  6.         }, 
  7.         { 
  8.              "userName""baobao"
  9.              "userAge": 18 
  10.         } 
  11.     ] 

2)數組

a)規范的寫法:

  1.     "Users": [ 
  2.         { 
  3.             "userName""Bill.Gates"
  4.             "userAge": 60 
  5.         }
  6.         { 
  7.             "userName""baobao"
  8.             "userAge": 18 
  9.         } 
  10.     ] 
  11. }     

b)不規范的寫法:

  1.     { 
  2.         "userName""Bill.Gates"
  3.         "userAge": 60 
  4.     }, 
  5.     { 
  6.         "userName""baobao"
  7.         "userAge": 18 
  8.     } 

對以上格式進行歸納,我們發現,只需要指定好:

1)整個JSON字符串是規范的(這時是一個字典),還是不規范的(這時是一個數組)

2)對于規范的JSON字符串,每個JSON字段映射為實體的哪個字段,就是說,from是什么,to是什么?

3)實體字段的數據類型。對于JSON而言,簡單類型,只有NSString和NSNumber兩種(日期按字符串對待,布爾值按整數0和1對待)。復合類型,有2種:要么是一個自定義實體(這時是一個字典),要么是一個數組。

基于此,我們創建統一格式的實體格式如下:

//以下為UserEntity.h文件:

  1. #import <Foundation/Foundation.h> 
  2. @class ObjectMapping; 
  3. @interface UserEntity : NSObject 
  4. NSString *name; 
  5. NSNumber *age; 
  6.  
  7. @property (nonatomic,retain) NSString *name; 
  8. @property (nonatomic,retain) NSNumber *age; 
  9. - (ObjectMapping *)objectMapping; 
  10.  
  11. @end 
  12. //以下為UserEntity.m文件: 
  13. #import "UserEntity.h" 
  14. #import "ObjectMapping.h" 
  15. @implementation UserEntity 
  16. @synthesize name; 
  17. @synthesize age; 
  18.  
  19. - (ObjectMapping *)objectMapping { 
  20. ObjectMapping *mapping = [ObjectMapping mappingForClass:[UserEntity class]]; 
  21. [mapping converEntityFromJsonToEntity:@"userName" to:@"name" withClass: @"NSString"]; 
  22. [mapping converEntityFromJsonToEntity:@"userAge" to:@"age" withClass: @"NSNumber"]; 
  23. return mapping; 
  24.  
  25. - (void)dealloc { 
  26. [name release]; 
  27. [age release]; 
  28. [super dealloc]; 
  29. @end 

在格式統一的情況下,我們來討論在MyApp中是如何使用的,參見APageViewController.m文件,我們繼續改造上一節沒有完成的requestFinished方法:

201309101117.jpg

通過ObjectMappingLoader的loadObjectWithClassName方法,我們將jsonValue轉換為實體 result,然后再一次將result強制轉換為WeatherWrapEntity類型的實體。接下來我們就可以使用 weatherWrapEntity實體中的任何屬性了,都是JSON里面返回的數據。

使用起來非常簡單,但這一切都是MyLib類庫下ObjectMapping目錄中的3個類來實現的:

201309101122.jpg

原理比較簡單,使用到了迭代算法,把JSON格式的字符串先轉換為字典,然后再迭代之,轉換為實體。

本節源碼如下: YoungHeart-Chapter-05-1.zip

另外,對各種情況的模擬,參見MyApp下的MyAppTest目錄,這是一個單元測試,相應的Target為MyAppTests,每次修改 MyLib的時候不是要把libMyLib.a重新引入到MyApp項目的MyApp這個Target中嘛,請同時將其也引入到MyAppTests這個 Target中。

責任編輯:閆佳明 來源: cnblogs
相關推薦

2013-09-03 09:35:48

無線客戶端框架設計iOS

2013-09-03 09:55:42

iOS無線客戶端框架設計

2013-09-09 10:48:24

iOS無線客戶端框架設計

2013-09-09 10:36:14

iOS無線客戶端框架設計

2013-09-03 09:10:56

2012-11-28 11:05:42

IBMdW

2009-09-16 16:09:41

NIS服務器客戶端NIS

2009-06-12 19:18:08

REST客戶端框架JavaScript

2010-03-19 12:14:13

無線AP Client

2013-07-22 14:29:35

iOS開發ASIHTTPRequ

2011-03-07 13:50:20

2009-11-05 13:08:44

WCF客戶端配置

2010-03-16 17:53:43

無線客戶端NIC

2012-06-25 12:43:26

.NET框架

2011-08-17 10:10:59

2021-09-22 15:46:29

虛擬桌面瘦客戶端胖客戶端

2010-01-05 14:32:01

JSON 數據

2023-03-31 13:31:45

2024-11-21 16:37:30

客戶端業務解耦框架

2013-06-24 17:23:23

安卓客戶端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一区2区三区3区公司 | 国产精品欧美一区二区三区不卡 | 欧美精品一区二区三区视频 | 国产精品区一区二区三区 | 国产综合视频 | 99精品欧美一区二区蜜桃免费 | 久久久久久久一区 | 日韩欧美三级 | 国产精品一区二区视频 | 中文一区二区视频 | 欧美激情久久久 | 日韩在线一区二区三区 | www.久久| 一区二区三区在线观看视频 | 国产电影精品久久 | 欧美国产日韩在线 | 久久av网 | 国产欧美精品区一区二区三区 | 视频在线观看一区 | 精品少妇v888av | 超碰人人做 | 爱草在线 | 精品国产三级 | 欧美日韩久久精品 | 日韩成人免费 | 中文字幕乱码一区二区三区 | 日本a视频 | 中文字幕不卡在线观看 | 亚洲 欧美 另类 综合 偷拍 | 亚洲精品一区二区三区蜜桃久 | 久久精品视频在线观看 | 日韩欧美在线一区 | 久久午夜国产精品www忘忧草 | 午夜丁香视频在线观看 | 亚洲国产aⅴ精品一区二区 免费观看av | 亚洲欧美在线视频 | 视频在线h | 亚洲欧美成人在线 | 国产精品久久福利 | 日日夜夜精品视频 | 日韩免费高清视频 |