ZZMonster一個方法自動生成Model(相容YYModel)
# ZZMonster(相容YYModel)
純程式碼編寫,無需安裝任何外掛,一個方法輕鬆搞定複雜Json轉Model。(相容[YYModel](https://github.com/ibireme/YYModel))
### 示例:
### 1.下載[ZZMonster](https://github.com/zhangs3721/ZZMonster)並匯入專案中。ZZMonster目錄:
![ZZMonster目錄](https://upload-images.jianshu.io/upload_images/5173163-5e81d033c36d52cf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
### 2.匯入標頭檔案 `#import "ZZWriter.h"`,呼叫此方法:
```objectivec
/* 呼叫方法
* FileName: 檔名
* ExtensionClassName: 為預防自動生成的類名重複。例Authors類後加字尾->AuthorsClass,不會汙染資料。
* Json: 請求到的json,預設是(NSDictionary *)json。
* URL: 生成檔案存放的路徑。
* error: 生成檔案發生錯誤
*/
+ (void)writeClassObjectsWithFileName:(NSString *)fileName withExtensionClassName:(NSString *)extensionName withJson:(NSDictionary *)json toFileURL:(NSURL *)url error:(NSError **)error;
```
如圖:
![呼叫主方法](https://upload-images.jianshu.io/upload_images/5173163-413ef5aa4ba27598.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
### 3.匯入生成好的model檔案:
![匯入生成好的model檔案](https://upload-images.jianshu.io/upload_images/5173163-0364861d3c9bc845.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
### 4.引用.h `#import "BaseModel.h"`後,使用YYModel。
![引用.h `#import "BaseModel.h"`後,使用YYModel](https://upload-images.jianshu.io/upload_images/5173163-2ec79e2304084259.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
## 附:複雜json自動生成概要:
### 1.json示例:
```json
{
"author" : {
"bools" : true,
"author" : {
"author" : "zzz",
"authors" : {
"author" : 19.1
}
}
},
"pages" : 256,
"book_name" : "Harry Potter",
"book_info" : [
{
"one" : "this is one day"
},
{
"one" : 10,
"id" : "this is id"
},
]
}
```
生成model圖:
![生成model圖](https://upload-images.jianshu.io/upload_images/5173163-f81d1de1e64b9a1d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
**注:** 示例的json中,有幾點特殊。
* 1.重複的key值`author `。
* 2.特殊key值`id`。
* 3.陣列`book_info`中的key值`one`的型別不同。
* 4.類名字尾`+Class`。
處理方法:
* 1.重複的key值生成的類名,從第二個類起,類名前加一個`Z`。
* 2.屬性名是系統保留字的,全部大寫,因為大寫不影響智慧提示。
* 3.如果陣列中相同層級的key值型別不同,統一轉化為字串。
* 4.專案不同.h檔案中類名相同會引發報錯,類名並不會汙染資料,建議加上類名字尾。(隨機字串也可以)